一. 如何理解js中的对象this
1.抽象的角度:针对现实中的具体事物的一种抽象。spa
2.数据的角度:将无需的变量集合在一块儿。code
二. 对象的特性:经过设置Object的defineProperty方法实现对象
Object.defineProperty(param1,param2,param3)param1须要定义属性的对象。param2需被定义或修改的属性名。param3
需被定义或修改的属性的描述符。
blog
1.可配置性:configurable(true/false)默认值为true,代表属性是否可删除it
var person = { name: "zhangsan", age: 21, sayName: function() { console.log(this.name); } }; Object.defineProperty(person, "name", { configurable: false });
false表示不能删除,因此依然可以打印出zhangsanio
打印结果为:zhangsan,21console
2.枚举性:enumerable(true/false)默认值为true,代表属性的可访问性table
var person = { name: "zhangsan", age: 21, sayName: function() { console.log(this.name); } }; Object.defineProperty(person, "name", { enumerable: false }); for(var attr in person) { console.log(attr + ":" + person[attr]); }
false表示不能访问到person对象的name属性,因此控制台打印不出person的namefunction
打印结果为:
age:21
sayName:function () {
console.log(this.name);
}
3.可修改:writable(true/false)默认值为true,代表属性的可修改性
var person = { name: "zhangsan", age: 21, sayName: function() { console.log(this.name); } }; Object.defineProperty(person, "name", { writable: false }); person.name = "lis"; console.log(person.name);
false表示不能修改,因此打印结果仍是zhangsan,若是是true或者不设置,打印结果就是lis,21
打印结果为:zhangsan,21