摘要:作用修改屬性默認(rèn)的特性參數(shù)屬性所在的對(duì)象屬性的名字和一個(gè)描述符對(duì)象。描述符對(duì)象的屬性必須是和。這個(gè)方法接收兩個(gè)參數(shù)屬性所在的對(duì)象和要讀取器描述符的屬性名稱(chēng)。
屬性的類(lèi)型
ECMA-262 第 5 版在定義只有內(nèi)部才用的特性(attribute)時(shí),描述了屬性(property)的各種特征。定義這些屬性是為了實(shí)現(xiàn)JavaScript引擎用的,因此在JavaScript中不能直接訪問(wèn)它們。為了我表示特性是內(nèi)部值,改規(guī)范把它們放在了兩對(duì)兒方括號(hào)中,例如[[Enumerable]]。
ECMAScript 中有兩種屬性:數(shù)據(jù)屬性和訪問(wèn)器屬性
1.數(shù)據(jù)屬性數(shù)據(jù)屬性包含一個(gè)數(shù)據(jù)值的位置。在這個(gè)位置可以讀取和寫(xiě)入值。數(shù)據(jù)屬性有 4 個(gè)描述其行為的特性。
[[Configurable]]:表示能否通過(guò) delete 刪除屬性從而重新定義屬性,能否修改屬性的特性,或者能否把屬性修改為訪問(wèn)器屬性。直接在對(duì)象上定義的屬性,它們的這個(gè)特性默認(rèn)值為 true。
[[Enumerable]]:表示能否通過(guò) for-in 循環(huán)返回屬性。直接在對(duì)象上義的屬性,它們的這個(gè)特性默認(rèn)值為 true。
[[Writable]]:表示能否修改屬性的值。直接在對(duì)象上定義的屬性,它們的這個(gè)特性默認(rèn)值為 true。
[[Value]]:包含這個(gè)屬性的數(shù)據(jù)值。讀取屬性值的時(shí)候,從這個(gè)位置讀;寫(xiě)入屬性值的時(shí)候,新值保存在這個(gè)位置。這個(gè)特性的默認(rèn)值為 undefined。
Object.defineProperty()作用:修改屬性默認(rèn)的特性
參數(shù):屬性所在的對(duì)象、屬性的名字、和一個(gè)描述符對(duì)象。描述符對(duì)象的屬性必須是configurable、enumerable、writable 和 value。
Object.defineProperty(person, "name", { writable: false, value: "Nicholas" }); alert(person.name); //"Nicholas" person.name = "Greg"; alert(person.name); //"Nicholas"
一旦把configurable屬性定義為不可配置的,就不能再把它變回可配置了。此時(shí),再調(diào)用 Object.defineProperty()方法修改除 writable 之外
的特性,都會(huì)導(dǎo)致錯(cuò)誤
var person = {}; Object.defineProperty(person, "name", { configurable: false, value: "Nicholas" }); //拋出錯(cuò)誤 Object.defineProperty(person, "name", { configurable: true, value: "Nicholas" });
在調(diào)用 Object.defineProperty()方法時(shí),如果不指定,configurable、enumerable 和writable 特性的默認(rèn)值都是 false(未調(diào)用改方法時(shí)默認(rèn)值都為true)
2. 訪問(wèn)器屬性訪問(wèn)器屬性不含數(shù)據(jù)值;他們包含一對(duì)兒getter和setter函數(shù)(不是必需的)。在讀取訪問(wèn)器屬性時(shí),會(huì)調(diào)用getter函數(shù),這個(gè)函數(shù)負(fù)責(zé)返回有效的值;在寫(xiě)入訪問(wèn)器屬性時(shí),會(huì)調(diào)用setter函數(shù)并傳入新值。這個(gè)函數(shù)負(fù)責(zé)如何處理數(shù)據(jù)
訪問(wèn)器的四個(gè)屬性:
[[Configurable]]:表示能否通過(guò) delete 刪除屬性從而重新定義屬性,能否修改屬性的特性,或者能否把屬性修改為數(shù)據(jù)屬性。對(duì)于直接在對(duì)象上定義的屬性,這個(gè)特性的默認(rèn)值為true。
[[Enumerable]]:表示能否通過(guò) for-in 循環(huán)返回屬性。對(duì)于直接在對(duì)象上定義的屬性,這個(gè)特性的默認(rèn)值為 true。
[[Get]]:在讀取屬性時(shí)調(diào)用的函數(shù)。默認(rèn)值為 undefined。
[[Set]]:在寫(xiě)入屬性時(shí)調(diào)用的函數(shù)。默認(rèn)值為 undefined。
訪問(wèn)器屬性不能直接定義,必須使用 Object.defineProperty()來(lái)定義。
var book = { _year: 2004, //下劃線是一種常用的記號(hào),用于表示只能通過(guò)對(duì)象方法訪問(wèn)的屬性 edition: 1 }; Object.defineProperty(book, "year", { get: function(){ return this._year; }, set: function(newValue){ if (newValue > 2004) { this._year = newValue; this.edition += newValue - 2004; } } }); book.year = 2005; alert(book.edition); //2
支持 ECMAScript 5 的這個(gè)方法的瀏覽器有 IE9+(IE8 只是部分實(shí)現(xiàn))、Firefox 4+、Safari 5+、Opera 12+ 和 Chrome 。在這個(gè)方法之前,要?jiǎng)?chuàng)建訪問(wèn)器屬性,一般都使用兩個(gè)非標(biāo)準(zhǔn)的方法:__defineGetter__()和__defineSetter__()。這兩個(gè)方法最初是由 Firefox 引入的,后來(lái) Safari 3、Chrome 1 和 Opera 9.5 也給出了相同的實(shí)現(xiàn)
var book = { _year: 2004, edition: 1 }; //定義訪問(wèn)器的舊有方法 book.__defineGetter__("year", function(){ return this._year; }); book.__defineSetter__("year", function(newValue){ if (newValue > 2004) { this._year = newValue; this.edition += newValue - 2004; } }); book.year = 2005; alert(book.edition); //2 AccessorPropertiesExample02.htm 在不支持 Object.defineProperty() 方法的瀏覽器中不能修改 [[Configurable]] 和 [[Enumerable]]。2 定義多個(gè)屬性
Object.defineProperties()方法,利用這個(gè)方法可以通過(guò)描述符一次定義多個(gè)屬性。這個(gè)方法接收兩個(gè)對(duì)象參數(shù):第一個(gè)對(duì)象是要添加和修改器屬性的對(duì)象,第二個(gè)對(duì)象的屬性和第一個(gè)對(duì)象中要添加或修改的屬性一一對(duì)象。
var book = {}; Object.defineProperties(book, { _year: { value: 2004 }, edition: { value: 1 }, year: { get: function(){ return this._year; }, set: function(newValue){ if (newValue > 2004) { this._year = newValue; this.edition += newValue - 2004; } } } });3 讀取屬性的特性
Object.getOwnPropertyDescriptor()方法,可以取得給定屬性的描述符。這個(gè)方法接收兩個(gè)參數(shù): 屬性所在的對(duì)象和要讀取器描述符的屬性名稱(chēng)。返回值是一個(gè)對(duì)象,如果是訪問(wèn)器屬性,這個(gè)對(duì)象的屬性有configurable、enumerable、get 和 set;如果是數(shù)據(jù)屬性,這個(gè)對(duì)象的屬性有 configurable、enumerable、writable 和 value。
var book = {}; Object.defineProperties(book, { _year: { value: 2004 }, edition: { value: 1 }, year: { get: function(){ return this._year; }, set: function(newValue){ if (newValue > 2004) { this._year = newValue; this.edition += newValue - 2004; } } } }); var descriptor = Object.getOwnPropertyDescriptor(book, "_year"); alert(descriptor.value); //2004 alert(descriptor.configurable); //false
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/103465.html
摘要:對(duì)象是屬性的無(wú)序集合。使用對(duì)象直接量創(chuàng)建的對(duì)象的原型就是,使用運(yùn)算符創(chuàng)建的對(duì)象的原型是構(gòu)造函數(shù)的的值。主要目的是將對(duì)象鎖定,避免外界干擾。判斷對(duì)象是否封閉。刪除屬性可刪除對(duì)象的自有屬性且為的屬性。 對(duì)象是屬性的無(wú)序集合。因此,這一章主要從對(duì)象和屬性兩個(gè)方面來(lái)闡述。showImg(https://box.worktile.com/view/c8f5f376fe314aeca69d9b4c...
摘要:但好在還給我們提供了一個(gè)方法,每一個(gè)對(duì)象都有這樣一個(gè)方法,專(zhuān)門(mén)用來(lái)判斷某個(gè)屬性是否是該對(duì)象的私有屬性。如果你想要用對(duì)象字面形式,你只能在創(chuàng)建對(duì)象時(shí)定義訪問(wèn)器屬性。在中,我們使用凍結(jié)一個(gè)對(duì)象,并且使用來(lái)判斷一個(gè)對(duì)象是否被凍結(jié)。 說(shuō)完了對(duì)象那些不常用的冷知識(shí),是時(shí)候來(lái)看看JavaScript中對(duì)象屬性有哪些有意思的東西了。 不出你所料,對(duì)象屬性自然也有其相應(yīng)的特征屬性,但是這個(gè)話題有點(diǎn)復(fù)雜...
摘要:通過(guò)對(duì)返回字符串切片第位到倒數(shù)第位即可獲得對(duì)象的類(lèi)型。測(cè)試對(duì)象是的深拷貝是的子集,不能表示中所有值。序列化結(jié)果是,對(duì)象序列化結(jié)果是日期字符串不能表示函數(shù)對(duì)象和只能序列化對(duì)象自有的可枚舉屬性。 對(duì)象 對(duì)象是JavaScript的基本數(shù)據(jù)類(lèi)型:屬性的無(wú)序集合。每個(gè)屬性key: value和屬性描述符descripter組成。 屬性名key:字符串或合法的變量標(biāo)識(shí)符; 屬性值value:...
摘要:盡管的右操作數(shù)是構(gòu)造函數(shù),但計(jì)算過(guò)程實(shí)際是檢測(cè)了對(duì)象的繼承關(guān)系。通過(guò)創(chuàng)建的對(duì)象使用構(gòu)造函數(shù)的屬性作為它們的原型。 JavaScript之對(duì)象屬性 Object.create()繼承 ECMAScript 5定義了一個(gè)名為Object.create()的方法,它創(chuàng)建一個(gè)新對(duì)象, 其中第一個(gè)參數(shù)是這個(gè)對(duì)象的原型。Object.create()提供第二個(gè)可選參數(shù),用以對(duì)對(duì)象的屬性進(jìn)行進(jìn)一步描...
摘要:屬性名可以是包含空字符串在內(nèi)的任意字符串,但對(duì)象中不能存在兩個(gè)同名的屬性。客戶端中表示網(wǎng)頁(yè)結(jié)構(gòu)的對(duì)象均是宿主對(duì)象。這里的函數(shù)稱(chēng)做構(gòu)造函數(shù),構(gòu)造函數(shù)用以初始化一個(gè)新創(chuàng)建的對(duì)象。通過(guò)關(guān)鍵字和構(gòu)造函數(shù)調(diào)用創(chuàng)建的對(duì)象的原型就是構(gòu)造函數(shù)的屬性的值。 對(duì)象是 JavaScript 的數(shù)據(jù)類(lèi)型。它將很多值(原始值或者其他對(duì)象)聚合在一起,可通過(guò)名字訪問(wèn)這些值,因此我們可以把它看成是從字符串到值的映射...
摘要:對(duì)象是什么在中,一個(gè)對(duì)象就像一個(gè)單獨(dú)擁有屬性和類(lèi)型的實(shí)體。一個(gè)杯子作為一個(gè)對(duì)象,杯子有顏色重量等屬性。同樣,對(duì)象也有屬性定義它的特征。方法是關(guān)聯(lián)到某個(gè)對(duì)象的函數(shù),或者說(shuō),一個(gè)方法是一個(gè)值為某個(gè)函數(shù)的對(duì)象屬性。 對(duì)象是什么 在JavaScript中,一個(gè)對(duì)象就像一個(gè)單獨(dú)擁有屬性和類(lèi)型的實(shí)體。一個(gè)杯子作為一個(gè)對(duì)象,杯子有顏色、重量等屬性。同樣,JavaScript對(duì)象也有屬性定義它的特征。...
閱讀 2364·2021-09-27 13:35
閱讀 619·2019-08-30 15:55
閱讀 870·2019-08-30 15:53
閱讀 614·2019-08-30 15:52
閱讀 2210·2019-08-30 12:59
閱讀 2351·2019-08-29 16:42
閱讀 1552·2019-08-26 18:26
閱讀 2525·2019-08-26 13:48