• 关于访问器属性


     

    要修改属性默认的特性,必须使用ECAMScript 5的 Object.defineProperty() 方法。
    例如:

    var person = {};
    Object.defineProperty(
    person,'name',{
    writable:false,
    value:'tom'
    }
    );
    console.log(person.name);//tom
    person.name = 'join';
    console.log(person.name);//tom

    这个例子创建了一个名为name的属性,他的值为tom是只读的。这个属性的值是不可以修改的,如果尝试为他指定新值,在非严格模式下,赋值操作将被忽略,在严格模式下,赋值操作将会导致抛出错误。
    类似的规则也适用于不可配置的属性。例如:

    var person = {};
    Object.defineRroperty(person,'name',{
    configurable:false,
    value:'tom'
    });
    console.log(perso.name);//tom
    delete person.name;//false
    console.log(person.name);//tom

    可以多次调用Object.defineProperty()方法修改同一个属性,但是把configurable特性设置为false之后就会有限制

    调用这个方法的时候,如果不指定,configurable、enumerable 和writable特性的默认值都是false

    访问器属性
    访问器属性不包含数据值
    他们包含一对getter和setter函数(不过,这两个函数都不是必须的)
    在读取访问器属性的时候,会调用getter函数,这个函数复制返回有效的值。
    在写入访问器属性的时候,会调用setter函数,并传入新值,这个函数负责决定如何处理数据。
    访问器属性有如下四个特性
    configurable
    表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为数据属性。
    直接在对象时定义的属性,这个特性的默认值为true
    enumerable
    保湿能否通过for-in循环返回属性。
    直接在对象上定义的属性,这个特性的默认值为true
    get
    在读取属性时调用的函数
    默认值为undefined
    set
    在写入属性时调用的函数
    默认值为undefined
    访问器属性不能直接定义。必须使用 Object.defineProperty()来定义。
    例子:

    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
  • 相关阅读:
    美的书,献给所有追求美的人
    《WCF揭秘》:欢迎大家来找我的茬(有奖)!
    这个寒冬,如何让我们的身价翻倍?
    微软中文论坛周年Party掠影
    ASP.NET 3.5之屠龙刀——《ASP.NET高级程序设计(第2版)》
    Red Hat Linux指南
    一部孟宪会推荐的C#图解教程
    左菜单js效果
    分享图标
    谷歌hack
  • 原文地址:https://www.cnblogs.com/benyu-aimao/p/8884541.html
Copyright © 2020-2023  润新知