JavaScript 对象属性

JavaScript中的对象属性有两种:

 

一,数据属性

 

数据属性有四个描述其行为的特性:

1:Configurable

定义了能否删除属性,能否修改属性的特性,能否把属性修改为访问器属性,该属性默认值是true。

2,Enumerable

定义了能否通过for...in遍历对象属性,该属性默认值时true。

3,Writable

定义了能否修改对象的属性

4,Value

定义了属性的数据值,默认为undefined

 

创建一个对象:

var school={

name:"北大"

};

我们要修改属性默认的特性,必须使用ECMAScript5的Object.defineproperty方法。

 

操作1:修改configurable为false

Object.defineProperty(school,"name",{

configurable:false

});

执行delete school.name,打开浏览器控制台可以看到,在非严格模式下没有任何反应,在严格模式下会有错误提示。

错误提示:Uncaught TypeError: Cannot delete property 'name' of #<Object>

 

既然configurable已经被设置为false,就不能在调用defineProperty方法修改回true,否则不管是否严格模式都会报错。

Object.defineProperty(school,"name",{

configurable:true

});

错误提示:Uncaught TypeError: Cannot redefine property: name

 

但是writable特性例外,除了修改Writable的特性不会报错,修改其它的特性都会报错。

 

 

 

二,访问器属性

 

访问器属性也有四个描述其行为的特性:

1:Configurable

定义了能否删除属性,能否修改属性的特性,能否把属性修改为数据属性,该属性默认值是true。

2,Enumerable

定义了能否通过for...in遍历对象属性,该属性默认值时true。

3,Set

修改属性值的时候调用该函数

4,Get

读取属性值的时候调用该函数

 

    var book = {
        _year: 2017,
        editor: 1

    };
    Object.defineProperty(book, "year", {
        get: function() {
            return this._year;

        },
        set: function(newVal) {
            if (newVal != this._year) {
                this._year = newVal;
                this.editor++;
            }

        }
    });

 定义的访问器属性,只能通过对象方法访问。

发布了54 篇原创文章 · 获赞 0 · 访问量 7698

猜你喜欢

转载自blog.csdn.net/yuyongkun4519/article/details/90375581