美文网首页
JavaScript — 对象的数据属性和访问器属性

JavaScript — 对象的数据属性和访问器属性

作者: 阳光小羊羊的草场 | 来源:发表于2018-07-06 16:08 被阅读0次
    1. 数据属性
    • [[Configurable]]:表示能否通过 delete 删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性,默认为true;若把configurable 设置为false,则表示不能从对象中删除属性,且不能再变回可配置的了,此时再调用Object.defineProperty() 修改除writable之外的特性都会导致错误
    • [[Enumerable]]:表示能否通过 for-in 循环返回属性
    • [[Writable]]:表示能否修改属性的值
    • [[Value]]:包含这个属性的数据值

    Object.defineProperty(属性所在的对象,属性的名字,一个描述符对象)`用来修改属性默认的特性

    var person = {};
    Object.defineProperty(person, "name", {
        writable: false,
        value: "Nicholas"
    });
    console.log(person.name); //"Nicholas"
    person.name = "Greg"; 
    console.log(person.name); //"Nicholas"
    
    1. 访问器属性
    • [[Configurable]]:表示能否通过 delete 删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性,默认为true
    • [[Enumerable]]:表示能否通过 for-in 循环返回属性
    • [[Get]]:在读取属性时调用的函数,默认值为 undefined
    • [[Set]]:在写入属性时调用的函数,默认值为 undefined
    var book = {
        _year: 2004,
        edition: 1
    };
    Object.defineProperty(book, "year", {
        get: function(){
            return this._year;
        },
        set: function(newValue){
    
            if (newValue > 2004) {  
                this._year = newValue;
                this.edition += newValue - 2004;
            }
    
        }
    });
    book.year = 2005;
    console.log(book.edition); //2
    

    Object.defineProperties()定义多个属性

    var book = {};
    
    Object.defineProperties(book,
        _year: {
            value: 2004
        },
        edition: {
            value: 1
        },
        year: {
            get: function(){
                return this._year;
            },
            set: function(newValue){
    
                if (newValue > 2004) {  
                    this._year = newValue;
                    this.edition += newValue - 2004;
                }
    
        }
    });
    

    Object.getOwnPropertyDescriptor()读取属性的特性

    var descriptor = Object.getOwnPropertyDescriptor(book, "_year");
    console.log(descriptor.value); //2004
    console.log(descriptor.configurable); //false
    console.log(typeof descriptor.get); //"undefined"
    
    var descriptor = Object.getOwnPropertyDescriptor(book, "year");
    console.log(descriptor.value); //"undefined"
    console.log(descriptor.enumerable); //false
    console.log(typeof descriptor.get); //"function"
    

    相关文章

      网友评论

          本文标题:JavaScript — 对象的数据属性和访问器属性

          本文链接:https://www.haomeiwen.com/subject/zntbuftx.html