• JavaScript学习——理解对象


    var person={
    name:"Nicholas",
    age:29,
    job:"Software Engineer",
    
    sayName:function(){
    alert(this.name);
    }
    };

    1.属性类型

    (1)数据属性

    [[configurable]]:表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性。默认为true。

    [[Enumerable]]:表示能否通过for-in循环返回属性。默认为true。

    [[Writable]]:表示能否修改属性的值。默认为true。

    [[Value]]:包含这个属性的数据值。默认为undefined。

    var person={}
    Object.defineProperty(person,"name",{
    writable:false,
    configurable:false,
    value:"Nicholas"
    });
    alert(person.name);//"Nicholas"
    person.name="Greg";
    alert(person.name);//"Nicholas"
    delete person.name;
    alert(person.name);//"Nicholas"

    不过建议在IE8不使用Object.defineProperty()方法

    (2)访问器属性

    [[configurable]]:表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性。默认为true。

    [[Enumerable]]:表示能否通过for-in循环返回属性。默认为true。

    [[Get]]:在读取属性时调用的函数。默认为undefined。

    [[Set]]:在写入属性时调用的函数。默认为undefined。

    //待完善

    2.定义多个属性

    var book={};
    Object.defineProperities(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;
    }
    }
    }
    });

    3.读取属性的特性

    var book={};
    Object.defineProperities(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;
    }
    }
    }
    });
    var descriptor = Object.getOwnPropertyDescriptior(book,"_year");
    alert(descriptor.value);//2004
    alert(descriptor.configurable);//fasle
    alert(typeof descriptor.get);//"undefined"
    
    var descriptor = Object.getOwnPropertyDescriptior(book,"year");
    alert(descriptor.value);//undefined
    alert(descriptor.configurable);//fasle
    alert(typeof descriptor.get);//"function"
  • 相关阅读:
    linux svn切换用户
    解决QQ“抱歉,无法发起临时会话,您可以 添加对方为好友以发送消息”
    node.js中http.respone.end方法概述
    niginx:duplicate MIME type "text/html" in nginx.conf 错误(转载)
    大三暑假实习,我们可以怎么做
    一个Java程序员的实习总结(2)
    正式工作的前奏——一个Java程序员的实习总结(1)
    【个人】当我秀智商的时候我秀什么
    基于java的设计模式入门(1)——为什么要学习设计模式
    【个人】我不愿让你一个人
  • 原文地址:https://www.cnblogs.com/pilee/p/3447276.html
Copyright © 2020-2023  润新知