摘要:原型對象與方法枚舉的問題原型屬性的屬性與的枚舉問題有的時候設置成時仍然會被方法枚舉到。新建立的原型對象的屬性,也是按照規則返回結果。最后,再重申一遍,如果原型對象合實例存在同名屬性,無論如何都會被枚舉。
js 原型對象與for-in 方法枚舉的問題 原型屬性的[[enumerable]]屬性與for-in 的枚舉問題
有的時候[[enumerable]]設置成false 時仍然會被for-in 方法枚舉到。詳細情況如下:
function Person(){}; Person.prototype = { constructor: Person, name: "Oliver" }; var person1 = new Person(); Object.defineProperty(person1,"name",{ enumerable: true }) for (var x in person1){ console.log(x); }
這里原型對象存在name 屬性,person1 的name 屬性enumerable 為true,可以枚舉。
function Person(){}; Person.prototype = { constructor: Person, name: "Oliver" }; var person1 = new Person(); Object.defineProperty(person1,"name",{ enumerable: false }) for (var x in person1){ console.log(x); }
這里原型對象存在name 屬性,person1 的name 屬性enumerable 為false,也可以枚舉。
function Person(){}; Person.prototype = { constructor: Person, }; var person1 = new Person(); Object.defineProperty(person1,"name",{ enumerable: true }) for (var x in person1){ console.log(x); }
這里原型對象不存在name 屬性,person1 的name 屬性enumerable 為true,可以枚舉。
function Person(){}; Person.prototype = { constructor: Person, }; var person1 = new Person(); Object.defineProperty(person1,"name",{ enumerable: false }) for (var x in person1){ console.log(x); }
這里原型對象不存在name 屬性,person1 的name 屬性enumerable 為false,不可枚舉。
綜上所述,原型對象和實例如果都存在同名屬性,則無論實例中該屬性的[[enumerable]]是true 還是false 都可以被for-in 枚舉。
另一方面:
function Person(){}; Person.prototype = { constructor: Person, name: "Oliver" }; var person1 = new Person(); Object.defineProperty(Person.prototype,"name",{ enumerable: true }) for (var x in Person.prototype){ console.log(x); }
原型對象的屬性如果被修改了[[enumerable]],則按照規則返回結果。
function Person(){}; Person.prototype = { constructor: Person, }; var person1 = new Person(); Object.defineProperty(Person.prototype,"name",{ enumerable: false }) for (var x in Person.prototype){ console.log(x); }
新建立的原型對象的屬性[[enumerable]],也是按照規則返回結果。
最后,再重申一遍,如果原型對象合實例存在同名屬性,無論如何都會被for-in 枚舉。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/78190.html
摘要:高程讀書筆記第六章理解對象創建自定義對象的方式有創建一個實例,然后為它添加屬性和方法。創建了自定義的構造函數之后,其原型對象默認只會取得屬性至于其他方法都是從繼承而來的。 JS高程讀書筆記--第六章 理解對象 創建自定義對象的方式有創建一個Object實例,然后為它添加屬性和方法。還可用創建對象字面量的方式 屬性類型 ECMAScript在定義只有內部采用的特性時,描述了屬性的各種特征...
摘要:對象是的數據類型。對象是動態的,可以隨時新增和刪除自有屬性。客戶端中表示網頁結構的對象均是宿主對象。提供第二個可選參數,用以對對象的屬性進行進一步描述。沒有原型的對象為數不多,就是其中之一。運算符的左側是屬性名字符串,右側是對象。 對象是 JavaScript 的數據類型。它將很多值(原始值或者其他對象)聚合在一起,可通過名字訪問這些值,因此我們可以把它看成是從字符串到值的映射。對象是...
摘要:當作構造函數來使用,作為普通函數來使用,當在全局作用域中調用一個函數時,對象總是指向對象。調用構造函數時會為實例添加一個指向最初原型的的指針,而把原型修改為另外一個對象就等于切斷了構造函數于最初原型之間的聯系。 ECMA-262 把對象定義為 無序屬性的集合,其屬性可以包含基本值、對象或者函數。 即對象是一組沒有特定順序的值。對象的每個屬性或方法都有一個名字,而每個名字都映...
摘要:小結這下我們可以得出結論了個屬性返回的對象不止能遍歷到子元素,還能遍歷到來自其原型的三個屬性。既要防止那些添加修改了原型屬性的對象遍歷出多余的的結果,也要防止類似這種非標準屬性返回一個屬性的枚舉性不可控的對象的坑。 問題的引出 關于DOM元素的children屬性,以前我只在意它和childNodes屬性的區別:即children屬性只會返回子元素節點集合,而childNodes返回的...
前言:最近在細讀Javascript高級程序設計,對于我而言,中文版,書中很多地方翻譯的差強人意,所以用自己所理解的,嘗試解讀下。如有紕漏或錯誤,會非常感謝您的指出。文中絕大部分內容引用自《JavaScript高級程序設計第三版》。 2. 原型對象與in操作符 有兩種方式使用in操作符: 單獨使用和在for-in循環中使用。 單獨使用時,in操作符會通過對象能夠訪問給定屬性時返回true。 ==...
閱讀 2074·2021-10-12 10:12
閱讀 793·2021-09-24 09:47
閱讀 1194·2021-08-19 11:12
閱讀 3472·2019-08-29 13:06
閱讀 689·2019-08-26 11:43
閱讀 2573·2019-08-23 17:20
閱讀 1154·2019-08-23 16:52
閱讀 2602·2019-08-23 14:27