configurable: 表示能否通過delete來刪除屬性從而重新定義屬性,能夠修改屬性的特性,預設為true
enumberable: 表示是否能通過for-in迴圈返回屬性。預設為true
writable: 是否可以修改屬性, 預設為true
value: 包含這個屬性的資料值。讀取屬性值時3,從這個屬性讀,寫入屬性時,把新值儲存到這個位置。預設值為undefine.
getter: 在讀取屬性時,呼叫的函式
setter: 在寫入屬性時呼叫的函式
特別注意:一旦呼叫了object.defineproperty方法之後,那些未定義的特性值除了configurable為false之外,其他都為undefined;
必須使用object.defineproperty()方法。這個方法接受3個引數: 屬性所在的物件,屬性的名字,和乙個描述符物件。其中描述符物件的屬性必須是:configurable, enumberable, writable,value.設定其中乙個或者多個值,可以修改對應的特性值。
修改writable特性,設定為false從而使得屬性值不可修改,如下所示:
重點內容
var person = {};
object.defineproperty(person, "name", );
person.name = "jany"; //試圖把name屬性值設定為jany,但是失敗了.非嚴格模式下會忽略此語句,嚴格模式則會報錯的
console.log(person.name); //結果仍然為tom
將person設定了name屬性的值為tom,並且把它的writable特性設定為false,然後,我們試圖把它改jany,但是,最終列印出來的結果仍然是tom。
修改configurabel特性,設定為false使得屬性無法被delete(刪除),如下所示:
var person = {};
object.defineproperty(person, "name", );
console.log(person.name); //列印結果為tom
delete person.name; //試圖刪除name屬性
console.log(person.name); //但是name仍然存在,列印出tom
如果我們把configurable屬性值改為true,則屬性可以被delete
var person = {};
object.defineproperty(person, "name", );
console.log(person.name); //列印出tom
delete person.name; //試圖刪除name屬性
console.log(person.name); //刪除成功,列印出udefined
另外,一旦,我們我們把某個屬性的特性設定成了不可配置的,就再也不能把它變回可配置的了。此時,呼叫object.defineproperty()方法修改除了writable之外的特性都會報錯。
如下:
var person = {};
//把person.name屬性的configurable設定為false;
object.defineproperty(person, "name", );
//然後試圖重新把person.name屬性的configurable設定為true;但是瀏覽器出現報錯資訊。
object.defineproperty(person, "name", );
console.log(person.name);
瀏覽器會報錯資訊
//定義乙個物件book
var book = ;
//定義year屬性的特性
object.defineproperty(book, "year", ,
//重寫了set方法,每當對book.year進行賦值時,則相應的修改book._year和book.edition的值
set: function
(newvalue)
}});
book.year = 2005;
console.log(book.edition); //2
由於定義多個屬性的可能性很大,因此es5有定義乙個object.defineproperties方法。利用這個方法可以通過描述符一次定義多個屬性。這個方法接受兩個物件的引數;第乙個物件是要新增和修改器屬性的物件,第二個物件的屬性與第乙個物件中要新增或者修改的順序一一對應。
var book = {};
object.defineproperties(book, ,
// 定義乙個新的屬性edition,並且他的預設值是1,而且屬性值是可修改的
edition: ,
// 定義乙個新的屬性year,並且重寫了他的get和set方法
year: ,
set: function
(newvalue)
}}});
book.year = 2006;
console.log(book.edition);//3
讀取屬性的特性,使用object.getownpropertydescriptor方法
var book = {};
// 為該物件定義一些屬性
object.defineproperties(book, ,
edition: ,
year: ,
set: function(newvalue)
}}});
//獲取_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)
JavaScript事件event物件屬性
ie和ff獲取事件的不同 var e window.event e.target event 物件只在事件發生的過程中才有效。阻止事件預設行為 ie window.event.returnvalue true ff e.preventdefault 阻止事件冒泡行為 ie window.event....
JavaScript 判斷物件中是否有某屬性
通過點或者方括號可以獲取物件的屬性值,如果物件上不存在該屬性,則會返回undefined。當然,這裡的 不存在 指的是物件自身和原型鏈上都不存在,如果原型鏈有該屬性,則會返回原型鏈上的屬性值。建立物件 let test 獲取物件的自身的屬性 test.name lei test name lei 獲...
JavaScript中的物件
物件的實質是一組名值對,其中值可以為資料或函式。當值為資料時,對應的名被稱為物件的屬性 當值為函式時,對應的名被稱為物件的方法。通過object 類建立物件let person new object person.name guagua person.age 18 person.say functi...