感觉知识点有些琐碎,有忽略到的知识点希望大家可以交流...
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了