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