感觉知识点有些琐碎,有忽略到的知识点希望大家可以交流...

来源:4-4 [JavaScript]get/set方法

_Doogie

2016-03-21 17:48

1.当在对象里定义get / set 方法时,语法格式是:

var o = {

    get func(){}

    set func(){}

}

而在Object.defineProperty中重新定义属性时,语法却是这样(假设obj里有一个“name"属性

Object.defineProperty(obj,"name",{

    get: function(){}

    set: function(){}

})


2.在定义对象时,所有的数据属性默认为true(其中包括configurable,enumrable,writable,value),当然value是赋值的

当调用Object.defineProperty时所有默认为true的属性都变为false,只有自己手动去设置为true,configurable为true时代表传入Object.defineProperty的对象属性时可修改或者delete的,而enumrable是可枚举的(即能在for in循环中输出),writable代表属性值是否可写


3.对于视频中的例子,因为不太记得所以只能自己尝试写了..

var o = { value : 1};

Object.defineProperty(o,value,{writable:false});//此时除writable其他属性已经变为false;

o.value;//值为1

o.value = 100;//因为属性writable为false,所以值不可写

o.value;// 值还是为1

var obj = Object.create(o);//创建一个以o为原型的新对象

obj.value;// 值为1,通过实例-> 原型可查找到

obj.value = 100;//此时为obj添加了一个实例属性,值为100,覆盖原型o中的value

obj.value;//值为100

delete obj.value//因为默认的数据属性都为true,所以可删除

obj.value;//此时的value属性又是原型o中的value了

写回答 关注

3回答

  • Down_Up
    2016-04-25 19:56:19

    Object.defineProperty(obj, 'z', 

    {value : 100, configurable: true});

    最后只能这样修改OBJ的z值!


  • 葛乌
    2016-04-23 16:51:12

    错了!!对于第三点,当对象用defineProperty这种方式定义属性时。且writable为false。该对象的子对象也是不可写的,所以你的obj.value再怎么更改也是1、除非你用defineProperty再去定义obj中的value属性,视频中的最后几分钟的例子就是在说明这个!!请再回去仔细看看!!

  • chris_lu_tw
    2016-03-23 10:04:16

    真棒!

JavaScript深入浅出

由浅入深学习JS语言特性,且解析JS常见误区,从入门到掌握

281112 学习 · 1020 问题

查看课程

相似问题