学习JavaScript(1)关于对象


前言

文章参考红宝书JavaScript高级程序设计


一、JavaScript对象

ECMA-262把对象定义为:”无序属性的集合,其属性可以包含基本值,对象或者函数。”严格来讲,相当于说对象是一组没有特定顺序的值。对象的每个属性或者方法都有一个名字,而每个名字都映射到一个值。因此,我们可以把ECMAscript的对象想象成散列表(一组名值对,其中值可以是数据或函数)

二、JavaScript创建对象

其中cat为创建对象的名字,name,year,color是cat的属性。introduction是cat的方法

//对象创建(1)
        let cat = new Object();
        cat.name = "kiki";
        cat.year = 2;
        cat.color = "black";

        cat.introduction = function(){
            return cat.name + " is a " + cat.year + " years old " + cat.color + " cat";
        }
        console.log(cat.introduction());
        //kiki is a 2 years old black cat

这也是一种创建对象的方法,两种对象创建的cat对象相同。

//对象创建(2)
        let cat = {
            name: "kiki",
            year: 2,
            color: "black",
        }

        cat.introduction = function(){
            return this.name + " is a " + this.year + " years old " + this.color + " cat";
        }
        console.log(cat.introduction());
        //kiki is a 2 years old black cat

三、JavaScript对象属性

对象的属性在创建时都带有一些特征值,js通过这些特征值来定义他们的行为

1.数据属性

数据属性包含一个数据值的位置。在这个位置可以读取和写入值。数据属性有4个描述行为的特性
[[Configurable]]:表示能否通过delete删除重新定义属性,默认true
[[Enumerable]]:表示能否通过for-in循环返回属性,默认true
[[Writable]]:表示能否修改属性的值,默认true
[[Value]]:包含这个属性的数据值,默认underfined

以下两个例子使用Object.defineProperty修改属性的特征值

//修改特征,无法修改
        let cat = {}
        Object.defineProperty(cat,"color",{
            writable:false,
            value:"black"
        });
        cat.color = "white";
        console.log(cat.color);
        //依然为black
//修改特征,无法删除
        let cat = {}
        Object.defineProperty(cat,"color",{
            configurable:false,
            value:"black"
        });
        delete cat.color;
        console.log(cat.color);
        //依然为black

2.访问器属性

访问器属性不包含数据值,包含一对getter和setter函数(函数不是必需)。在访问器属性时,调用getter函数,这个函数负责返回有效值。在写入访问器时,会调用setter函数传入新值,这个函数负责如何处理数据。访问器属性有如下4个特性
[[Configurable]]:表示能否通过delete删除重新定义属性,默认true
[[Enumerable]]:表示能否通过for-in循环返回属性,默认true
[[Get]]:在读取属性时调用的函数,默认undefined
[[Set]]:在写入属性时调用的函数,默认undefined

       let cat={
            _year: 2,
            color: "black",
        }
        
        Object.defineProperty(cat,"year",{
            get: function(){
                return this._year;
            },
            set: function(color_judge){
                if(color_judge>10){
                    this._year=color_judge;
                    this.color =  "white";
                }
                else{
                    this._year=color_judge;
                    this.color = "balck";
                }
            }
        })
        console.log(cat.color); //black
        cat.year=12;
        console.log(cat.color); //white

以上代码创建cat对象,并给两个属性:_year,color。其中访问器属性year包含getter函数和setter函数。getter函数返回_year的值,setter函数根据年龄判断cat的color颜色。然后将数值传递回_year。例如year的值为12时也会改变_year,使其也变成12.

总结

个人学习笔记总结,每天进步多一点

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值