zoukankan      html  css  js  c++  java
  • 关于访问器属性

     

    要修改属性默认的特性,必须使用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
  • 相关阅读:
    mysql数据库开放远程连接的方法
    MySQL数据库字符集由utf8修改为utf8mb4一例
    解决silk-v3-decoder-master转换wav时,百度语音解析问题
    PHP高效率写法(详解原因)
    如何计算服务器能够承受多大的pv?
    微信开发中使用curl忽略https证书
    PHP libevent函数基本介绍
    PHP stream相关协议及上下文选项和参数归纳
    Centos搭建PHP5.3.8+Nginx1.0.9+Mysql5.5.17
    编码转换(UTF8->GBK)
  • 原文地址:https://www.cnblogs.com/benyu-aimao/p/8884541.html
Copyright © 2011-2022 走看看