1)在使用Object.defineProperty、Object.defineProperties 或 Object.create 函数的情况下添加数据属性,writable、enumerable和configurable默认值为false。
2)使用对象直接量创建的属性,writable、enumerable和configurable特性默认为true。
salary : {value : 5000,writable: true},显示指定下属性writable,默认是false
对象的属性标签可以确定当前属性是不是能够修改或者删除等操作,主要属性标签有configurable 是否可用 delete删除某个属性、enumerable 是否可用for in 遍历、writable 是否可以修改。
writeable:是是否可写,如果值为true代表可写,就是可以修改,如果值为false,代表不可写,就是不能修改,即只读的;configurable是可配置的意思,如果值为true代表可以删除,即可以delete 对象.属性,如果值为false,则不能删除
这节中的get和set声明的地方是在对象中,所以要按照对象里属性的方式去写。即get:function(){},而不能再写成get function(){}这种方式了,否则会报错。这是语法问题。
不知道你说的是什么逻辑,可以具体举个例子
this.salary*=1+level*0.1;----->this.salary = this.salary * (1 + level * 0.1);------->this.salary = parseInt(this.salary) +this.salary*level*0.1;分配法
复制过来没错啊。。。。
前3章算是对前面学习的总结,从第4章开始有复杂,我学过之后没有怎么用过,偶尔调试代码的时候会用到,具体也不清楚。。。。
var info = Object.getOwnPropertyDescriptor(Object, 'prototype');
console.log(info);
for (prop in info) {
console.log(prop + ':' + info[prop]);
}
Object.getOwnPropertyDescripto和obj.prototype功能否相同,为什么Object.getOwnPropertyDescripto不能用在function obj(){}上呀?obj.prototype也不能用在var obj={};上啊,
请看下此图
返回对象里面可以枚举的所有属性
writable/configurable/enumerable/value/get/set都是针对每一个属性提供的属性访问上的控制标签和方法。
应用的场景也是很多的,但确实暂时并不是特别常见。
Node.js编程,需要对属性的访问做控制,需要更健壮的get/set方法提供属性存取的控制。
前端安全,通过Object.defineProperties禁止部分敏感属性的访问。来防止前端页面环境被插件、ISP等因素篡改。
一些较为复杂的业务逻辑或较为底层的库,get/set/权限控制在一些情况下会让代码更加健壮。
当然,defineProperties是IE9+才支持的方法,完美的普及和应用还需要一些时间,但不会太远。