javaScript中的Object對(duì)象

1.Object.create與new的不同

????????Object.create(prototype, descriptors),創(chuàng)建一個(gè)具有指定原型且可選擇性地包含指定屬性的對(duì)象。

? ? ? ? prototype:必需,要用作原型的對(duì)象??梢詾閚ull。

? ? ? ? descriptors:可選。包含一個(gè)或多個(gè)屬性描述符的JavaScript對(duì)象。

下面的示例創(chuàng)建一個(gè)具有與 Object 對(duì)象相同的內(nèi)部原型的對(duì)象。??您會(huì)發(fā)現(xiàn),該對(duì)象具有與使用對(duì)象文本創(chuàng)建的對(duì)象相同的原型。??Object.getPrototypeOf?函數(shù)可獲取原始對(duì)象的原型。??若要獲取對(duì)象的屬性描述符,可以使用Object.getOwnPropertyDescriptor 函數(shù) (JavaScript)。??

下面的示例創(chuàng)建一個(gè)具有與 Shape 對(duì)象相同的內(nèi)部原型的對(duì)象。

Square.__proto__.name = '21',這兩個(gè)對(duì)象的內(nèi)部原型都有name屬性

o2為空對(duì)象,但o2.name輸出了jian,在對(duì)象o2上沒有找到name屬性,但在原型o上找到了。

由此可以總結(jié)Object.create()做了:?

1. 創(chuàng)建空對(duì)象{}?

2. 指定空對(duì)象{}的原型為Object.create()的參數(shù)。


new Object()

new配合構(gòu)造函數(shù)使用,創(chuàng)建一個(gè)新對(duì)象。person1的原型是Person.prototype。javascript使用__proto__指向?qū)ο蟮脑汀?/p>

Person原型上的方法和屬性person1可以直接訪問。person1.__proto__? 上的屬性和方法Person.prototype 可以訪問。

由此可以總結(jié)new做了;

? ? *創(chuàng)建實(shí)例對(duì)象person1。

? ? *調(diào)用構(gòu)造函數(shù)Person初始化person1成員變量。

? ? *指定實(shí)例對(duì)象的原型為Person.prototype對(duì)象。即person1.__proto__指向Person.prototype。


2.Object.defineProperty 函數(shù) (JavaScript)

將屬性添加到對(duì)象,或修改現(xiàn)有屬性的特性。

語法:Object.defineProperty(object, propertyname, descriptor)

? ? ? ? *向?qū)ο筇砑有聦傩?。?dāng)對(duì)象不具有指定的屬性名時(shí),發(fā)生此操作。

? ? ? ? *修改現(xiàn)有屬性的特性。當(dāng)對(duì)象已具有指定的屬性名時(shí),發(fā)生此操作。

參數(shù):

? ? ? ? object:必須。要在其上添加或修改屬性的對(duì)象。這可能是一個(gè)本機(jī)javascript對(duì)象(即用戶自定義的對(duì)象或內(nèi)置對(duì)對(duì)象)或DOM對(duì)象。

? ? ? ? propertyname:一個(gè)包含屬性名的字符串。

? ? ? ? descriptor:屬性描述符。它可以針對(duì)數(shù)據(jù)屬性或訪問器屬性。如果不設(shè)置默認(rèn)都是false。

? ? ? ? ? ? ? ? ? ? ? ? *value:屬性的值。

? ? ? ? ? ? ? ? ? ? ? ? *writable:如果為false,屬性的值就不能被重寫,只能為只讀了。

? ? ? ? ? ? ? ? ? ? ? ? *configurable:總開關(guān),一旦為false,就不能再設(shè)置他的(value,writable,configurable)。

? ? ? ? ? ? ? ? ? ? ? ? *enumerable:是否可枚舉(是否能在for in循環(huán)中遍歷出來或再Object.keys中列舉出來)。

返回值:已修改的對(duì)象。

若要修改對(duì)象的屬性特性,請(qǐng)將以下代碼添加到前面所示的?addDataProperty?函數(shù)。???descriptor?參數(shù)只包含?writable?特性。??其他數(shù)據(jù)屬性特性保持不變。??

Configurable:表示能否通過delete刪除此屬性,能否修改屬性的特性,或能否修改把屬性修改為訪問器屬性,如果直接使用字面量定義對(duì)象,默認(rèn)值為true。

Enumerable:表示該屬性是否可枚舉,即是否可以通過for-in循環(huán)或Object.keys()返回屬性,如果直接使用字面量定義對(duì)象,默認(rèn)值為true。

Writable:能否修改屬性的指,如果直接使用字面量定義對(duì)象,默認(rèn)值為true。

Value:改屬性對(duì)應(yīng)的值,默認(rèn)值為undefined。

Get:一個(gè)給屬性提供getter的方法(訪問對(duì)象屬性時(shí)調(diào)用的函數(shù),返回值就是當(dāng)前屬性的值),如果沒有g(shù)etter則為undefined。

該方法返回值被用作屬性值。默認(rèn)值為undefined。

Set:一個(gè)給屬性提供setter的方法(給對(duì)象屬性設(shè)置值時(shí)調(diào)用的函數(shù)),如果沒有setter則為undefined。該方法將接受唯一參數(shù),并將該參數(shù)的新值分配給該屬性。默認(rèn)為undefined。

屬性的enumerable值定義對(duì)象的屬性是否會(huì)出現(xiàn)在枚舉器(for..in循環(huán)和Object.keys())中。

屬性的configurable值控制一個(gè)對(duì)象的屬性可否被delete刪除,同時(shí)也控制該屬性描述符的配置可否改變(除了前文所述在configurable為false時(shí),若writable為true,則仍可以進(jìn)行一次修改將writable改變?yōu)閒alse)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第一組:楊昊 在Radio選中后改變Radio的樣式 比如這樣的: 以上三個(gè)單選框,第一個(gè)是默認(rèn)選中的,問題:如...
    胡諾閱讀 1,424評(píng)論 0 0
  • 自從當(dāng)了60秒組長,每天的語音數(shù)量都爆炸增長,化身在線客服。想表達(dá)什么,直接語音伺候,比起打字時(shí)的斟字酌句,...
    牛歡Vincent閱讀 162評(píng)論 0 0
  • 獨(dú)步過林杏花雨, 遲遲未退雪積霜。 二月此非尋常雪, 可知唯有一杏紅。 今年杏花開的比較早,也是我平生第一次見到杏...
    姬習(xí)閱讀 535評(píng)論 5 8
  • [For version 0.665] CJ (ccj0410@gmail.com)South China Agr...
    生信石頭閱讀 6,805評(píng)論 6 19
  • 之一:美國是個(gè)無比下作的國家 美國對(duì)臺(tái)灣的政策包含四個(gè)部分第一是堅(jiān)持一個(gè)中國原則第二是“與臺(tái)灣關(guān)系法”第三是對(duì)臺(tái)灣...
    驛舟閱讀 113評(píng)論 18 3

友情鏈接更多精彩內(nèi)容