1.ES5的屬性特性包括下面六個:瀏覽器
var person = {}; Object.defineProperty(person, "name", { writable: false,//設置屬性的特性爲不可修改的 value: "Tom" //把name屬性值設爲Tom }); person.name = "Jany"; //試圖把name屬性值設置爲Jany,可是失敗了.非嚴格模式下會忽略此語句,嚴格模式則會報錯的 console.log(person.name); //結果仍然爲Tom
var person = {}; Object.defineProperty(person, "name", { configurable: false, //把configurable設置爲false value: "Tom" }); console.log(person.name); //打印結果爲Tom delete person.name; //試圖刪除name屬性 console.log(person.name); //可是name仍然存在,打印出Tom
var person = {}; Object.defineProperty(person, "name", { configurable: true, value: "Tom" }); console.log(person.name); //打印出Tom delete person.name; //試圖刪除name屬性 console.log(person.name); //刪除成功,打印出udefined
var person = {};
//把person.name屬性的configurable設置爲false; Object.defineProperty(person, "name", { configurable: false, value: "Tome" }); //而後試圖從新把person.name屬性的configurable設置爲true;可是瀏覽器出現報錯信息。 Object.defineProperty(person, "name", { configurable: true, value: "lyl" }); console.log(person.name);
//定義一個對象book var book = { _year: 2004, //出版年份 edition: 1 //版本號 };
//定義year屬性的特性 Object.defineProperty(book, "year", {
//重寫get方法,即若是咱們試圖book.year獲取year值時,實質上是獲取book._year的值 get: function() { return this._year; },
//重寫了set方法,每當對book.year進行賦值時,則相應的修改book._year和book.edition的值 set: function(newValue) { if(newValue > 2004) { this._year = newValue; this.edition += newValue - 2004; } } }); book.year = 2005; console.log(book.edition); //2
var book = {}; Object.defineProperties(book, {
// 定義一個新的屬性_year,而且他的值爲2004 _year: { value: 2004 },
// 定義一個新的屬性edition,而且他的默認值是1,並且屬性值是可修改的 edition: { value: 1, writable: true// 可修改的 },
// 定義一個新的屬性year,而且重寫了他的get和set方法 year: { get: function() { return this._year; }, set: function(newValue){ if(newValue > 2004) { //alert("ok"); this._year = newValue; this.edition += newValue-2004; } } } }); book.year = 2006; console.log(book.edition);//3
讀取屬性的特性,使用Object.getOwnPropertyDescriptor方法
var book = {};
// 爲該對象定義一些屬性 Object.defineProperties(book, { _year: { value: 2004 }, edition: { value: 1, writable: true// 可修改的 }, year: { get: function() { return this._year; }, set: function(newValue){ if(newValue > 2004) { //alert("ok"); this._year = newValue; this.edition += newValue-2004; } } } }); //獲取_year屬性的特性 var descriptor1 = Object.getOwnPropertyDescriptor(book, "_year"); console.log(descriptor1.configurable); //false console.log(descriptor1.enumberable); //undefinded console.log(descriptor1.writable); //false console.log(descriptor1.value); //2004 console.log(descriptor1.get); //undefined console.log(descriptor1.set); //undefined console.log("\n"); //獲取year屬性的特性 var descriptor2 = Object.getOwnPropertyDescriptor(book, "year"); console.log(descriptor2.configurable); //false console.log(descriptor2.enumberable); //undefined console.log(descriptor2.writable); //undefined console.log(descriptor2.value); //undefined console.log(descriptor2.get); //function() console.log(descriptor2.set); //function(value)