摘要:返回當(dāng)前對(duì)象對(duì)應(yīng)的值。判斷當(dāng)前對(duì)象是否為另一個(gè)對(duì)象的原型。存取器新的值必須大于當(dāng)前值利用存取器,可以實(shí)現(xiàn)數(shù)據(jù)對(duì)象與對(duì)象的雙向綁定??刂茖?duì)象狀態(tài)提供了三種方法,精確控制一個(gè)對(duì)象的讀寫(xiě)狀態(tài),防止對(duì)象被改變。
Object對(duì)象的方法
當(dāng)Object 被作為工具方法,而不是構(gòu)造方法時(shí),
Object(arg):包裝方法,將非對(duì)象類(lèi)型包裝成一個(gè)對(duì)象
Object.create(proto[, propertiesObject]):
Object.getPrototypeOf(obj):
Object實(shí)例對(duì)象的方法必須區(qū)分“構(gòu)造函數(shù)的方法”和“實(shí)例對(duì)象的方法”。
valueOf():返回當(dāng)前對(duì)象對(duì)應(yīng)的值。
toString():返回當(dāng)前對(duì)象對(duì)應(yīng)的字符串形式。
這個(gè)方法很有用,可以用于判斷對(duì)象類(lèi)型
toLocalString():返回當(dāng)前對(duì)象對(duì)應(yīng)的本地字符串形式。
hasOwnProperty():判斷某個(gè)屬性是否為當(dāng)前對(duì)象自身的屬性,還是繼承自原型對(duì)象的屬性。
isPrototypeOf():判斷當(dāng)前對(duì)象是否為另一個(gè)對(duì)象的原型。
propertyIsEnumerable():判斷某個(gè)屬性是否可枚舉。
對(duì)象的屬性模型Object.getOwnPropertyDescriptor():獲取對(duì)象的屬性的精確描述模型
Object.defineProperty()
Object.defineProperties()
這兩個(gè)方法有性能損耗,會(huì)拖慢執(zhí)行速度,不宜大量使用。
如果一個(gè)屬性的enumerable為false,下面三個(gè)操作不會(huì)取到該屬性。
for..in循環(huán)
Object.keys方法
JSON.stringify方法(有時(shí)可以利用這一點(diǎn),為對(duì)象添加注釋信息。)
因此,enumerable可以用來(lái)設(shè)置“秘密”屬性。
遍歷對(duì)象屬性方法
Object.keys()
Object.getOwnPropertyNames()
一般情況下,幾乎總是使用Object.keys方法,遍歷數(shù)組的屬性。
var o ={ $n : 5, get next(){return this.$n++ }, set next(n) { if (n >= this.$n) this.$n = n; else throw "新的值必須大于當(dāng)前值"; } }; o.next // 5 o.next = 10; o.next // 10
利用存取器,可以實(shí)現(xiàn)數(shù)據(jù)對(duì)象與DOM對(duì)象的雙向綁定。
對(duì)象拷貝對(duì)于簡(jiǎn)單屬性,就直接拷貝,對(duì)于那些通過(guò)描述對(duì)象設(shè)置的屬性,則使用Object.defineProperty方法拷貝。
var extend = function (to, from) { var descriptor = Object.getOwnPropertyDescriptor(from, property); if (descriptor && ( !descriptor.writable || !descriptor.configurable || !descriptor.enumerable || descriptor.get || descriptor.set)) { Object.defineProperty(to, property, descriptor); } else { to[property] = from[property]; } }控制對(duì)象狀態(tài)
JavaScript提供了三種方法,精確控制一個(gè)對(duì)象的讀寫(xiě)狀態(tài),防止對(duì)象被改變。最弱一層的保護(hù)是preventExtensions,其次是seal,最強(qiáng)的freeze。
不可擴(kuò)展對(duì)象(不能加,可改,可刪)Object.preventExtensions方法可以使得一個(gè)對(duì)象無(wú)法再添加新的屬性。可以用delete命令刪除它的現(xiàn)有屬性。
判斷: Object.isExtensible(obj);
Object.seal方法使得一個(gè)對(duì)象既無(wú)法添加新屬性,也無(wú)法刪除舊屬性。
判斷: Object.isSealed(obj);
凍結(jié)的對(duì)象(不能加,不能改,不能刪)Object.freeze方法可以使得一個(gè)對(duì)象無(wú)法添加新屬性、無(wú)法刪除舊屬性、也無(wú)法改變屬性的值,使得這個(gè)對(duì)象實(shí)際上變成了常量。
判斷: Object.isFrozen(obj);
局限性: 需要注意的是,使用上面這些方法鎖定對(duì)象的可寫(xiě)性,但是依然可以通過(guò)改變?cè)搶?duì)象的原型對(duì)象,來(lái)為它增加屬性。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/88045.html
摘要:對(duì)象在中,除了數(shù)字字符串布爾值這幾個(gè)簡(jiǎn)單類(lèi)型外,其他的都是對(duì)象。那么在函數(shù)對(duì)象中,這兩個(gè)屬性的有什么區(qū)別呢表示該函數(shù)對(duì)象的原型表示使用來(lái)執(zhí)行該函數(shù)時(shí)這種函數(shù)一般成為構(gòu)造函數(shù),后面會(huì)講解,新創(chuàng)建的對(duì)象的原型。這時(shí)的函數(shù)通常稱(chēng)為構(gòu)造函數(shù)。。 本文原發(fā)于我的個(gè)人博客,經(jīng)多次修改后發(fā)到sf上。本文仍在不斷修改中,最新版請(qǐng)?jiān)L問(wèn)個(gè)人博客。 最近工作一直在用nodejs做開(kāi)發(fā),有了nodejs,...
摘要:而作為構(gòu)造函數(shù),需要有個(gè)屬性用來(lái)作為以該構(gòu)造函數(shù)創(chuàng)造的實(shí)例的繼承。 歡迎來(lái)我的博客閱讀:「JavaScript 原型中的哲學(xué)思想」 記得當(dāng)年初試前端的時(shí)候,學(xué)習(xí)JavaScript過(guò)程中,原型問(wèn)題一直讓我疑惑許久,那時(shí)候捧著那本著名的紅皮書(shū),看到有關(guān)原型的講解時(shí),總是心存疑慮。 當(dāng)在JavaScript世界中走過(guò)不少旅程之后,再次萌發(fā)起研究這部分知識(shí)的欲望,翻閱了不少書(shū)籍和資料,才搞懂...
摘要:如下所示在規(guī)范中,已經(jīng)正式把屬性添加到規(guī)范中也可以通過(guò)設(shè)置和獲取對(duì)象的原型對(duì)象對(duì)象之間的關(guān)系可以用下圖來(lái)表示但規(guī)范主要介紹了如何利用構(gòu)造函數(shù)去構(gòu)建原型關(guān)系。 前言 在軟件工程中,代碼重用的模式極為重要,因?yàn)樗麄兛梢燥@著地減少軟件開(kāi)發(fā)的成本。在那些主流的基于類(lèi)的語(yǔ)言(比如Java,C++)中都是通過(guò)繼承(extend)來(lái)實(shí)現(xiàn)代碼復(fù)用,同時(shí)類(lèi)繼承引入了一套類(lèi)型規(guī)范。而JavaScript是...
摘要:使用構(gòu)造函數(shù)的原型繼承相比使用原型的原型繼承更加復(fù)雜,我們先看看使用原型的原型繼承上面的代碼很容易理解。相反的,使用構(gòu)造函數(shù)的原型繼承像下面這樣當(dāng)然,構(gòu)造函數(shù)的方式更簡(jiǎn)單。 五天之前我寫(xiě)了一個(gè)關(guān)于ES6標(biāo)準(zhǔn)中Class的文章。在里面我介紹了如何用現(xiàn)有的Javascript來(lái)模擬類(lèi)并且介紹了ES6中類(lèi)的用法,其實(shí)它只是一個(gè)語(yǔ)法糖。感謝Om Shakar以及Javascript Room中...
摘要:中的所有對(duì)象都來(lái)自父的構(gòu)造函數(shù)。不同于數(shù)組的原型方法例如和只能被數(shù)組實(shí)例使用,對(duì)象方法直接來(lái)自構(gòu)造函數(shù),并使用對(duì)象實(shí)例作為參數(shù)。這稱(chēng)為靜態(tài)方法。創(chuàng)建對(duì)象的鍵值對(duì)的嵌套數(shù)組??捎糜诖_定對(duì)象是否已凍結(jié),并返回布爾值。 原文:How To Use Object Methods in JavaScript作者:Tania Rascia譯者:博軒 介紹 JavaScript 中,對(duì)象是 鍵/值 ...
摘要:于是退而求其次叫為類(lèi)的構(gòu)造函數(shù)。如果這個(gè)函數(shù)被用在創(chuàng)建自定義對(duì)象的場(chǎng)景中,我們稱(chēng)這個(gè)函數(shù)為構(gòu)造函數(shù)。遇到的問(wèn)題始終指向創(chuàng)建當(dāng)前對(duì)象的構(gòu)造函數(shù)。 Object.constructor,prototype 對(duì)象的prototype和constructor是兩個(gè)重要的屬性,他們總是成對(duì)出現(xiàn),提到constructor的地方,不得不涉及到另外一個(gè)非常重要的屬性prototype,它是js中基于...
閱讀 3968·2021-11-11 10:58
閱讀 3342·2021-09-26 09:46
閱讀 1922·2019-08-30 15:55
閱讀 987·2019-08-30 13:52
閱讀 1955·2019-08-29 13:11
閱讀 3036·2019-08-29 11:27
閱讀 1526·2019-08-26 18:18
閱讀 2648·2019-08-23 14:17