一. 如何理解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