摘要:原型對(duì)象與方法枚舉的問題原型屬性的屬性與的枚舉問題有的時(shí)候設(shè)置成時(shí)仍然會(huì)被方法枚舉到。新建立的原型對(duì)象的屬性,也是按照規(guī)則返回結(jié)果。最后,再重申一遍,如果原型對(duì)象合實(shí)例存在同名屬性,無論如何都會(huì)被枚舉。
js 原型對(duì)象與for-in 方法枚舉的問題 原型屬性的[[enumerable]]屬性與for-in 的枚舉問題
有的時(shí)候[[enumerable]]設(shè)置成false 時(shí)仍然會(huì)被for-in 方法枚舉到。詳細(xì)情況如下:
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); }
這里原型對(duì)象存在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); }
這里原型對(duì)象存在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); }
這里原型對(duì)象不存在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); }
這里原型對(duì)象不存在name 屬性,person1 的name 屬性enumerable 為false,不可枚舉。
綜上所述,原型對(duì)象和實(shí)例如果都存在同名屬性,則無論實(shí)例中該屬性的[[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); }
原型對(duì)象的屬性如果被修改了[[enumerable]],則按照規(guī)則返回結(jié)果。
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); }
新建立的原型對(duì)象的屬性[[enumerable]],也是按照規(guī)則返回結(jié)果。
最后,再重申一遍,如果原型對(duì)象合實(shí)例存在同名屬性,無論如何都會(huì)被for-in 枚舉。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/78190.html
摘要:高程讀書筆記第六章理解對(duì)象創(chuàng)建自定義對(duì)象的方式有創(chuàng)建一個(gè)實(shí)例,然后為它添加屬性和方法。創(chuàng)建了自定義的構(gòu)造函數(shù)之后,其原型對(duì)象默認(rèn)只會(huì)取得屬性至于其他方法都是從繼承而來的。 JS高程讀書筆記--第六章 理解對(duì)象 創(chuàng)建自定義對(duì)象的方式有創(chuàng)建一個(gè)Object實(shí)例,然后為它添加屬性和方法。還可用創(chuàng)建對(duì)象字面量的方式 屬性類型 ECMAScript在定義只有內(nèi)部采用的特性時(shí),描述了屬性的各種特征...
摘要:對(duì)象是的數(shù)據(jù)類型。對(duì)象是動(dòng)態(tài)的,可以隨時(shí)新增和刪除自有屬性。客戶端中表示網(wǎng)頁結(jié)構(gòu)的對(duì)象均是宿主對(duì)象。提供第二個(gè)可選參數(shù),用以對(duì)對(duì)象的屬性進(jìn)行進(jìn)一步描述。沒有原型的對(duì)象為數(shù)不多,就是其中之一。運(yùn)算符的左側(cè)是屬性名字符串,右側(cè)是對(duì)象。 對(duì)象是 JavaScript 的數(shù)據(jù)類型。它將很多值(原始值或者其他對(duì)象)聚合在一起,可通過名字訪問這些值,因此我們可以把它看成是從字符串到值的映射。對(duì)象是...
摘要:當(dāng)作構(gòu)造函數(shù)來使用,作為普通函數(shù)來使用,當(dāng)在全局作用域中調(diào)用一個(gè)函數(shù)時(shí),對(duì)象總是指向?qū)ο蟆U{(diào)用構(gòu)造函數(shù)時(shí)會(huì)為實(shí)例添加一個(gè)指向最初原型的的指針,而把原型修改為另外一個(gè)對(duì)象就等于切斷了構(gòu)造函數(shù)于最初原型之間的聯(lián)系。 ECMA-262 把對(duì)象定義為 無序?qū)傩缘募希鋵傩钥梢园局怠?duì)象或者函數(shù)。 即對(duì)象是一組沒有特定順序的值。對(duì)象的每個(gè)屬性或方法都有一個(gè)名字,而每個(gè)名字都映...
摘要:小結(jié)這下我們可以得出結(jié)論了個(gè)屬性返回的對(duì)象不止能遍歷到子元素,還能遍歷到來自其原型的三個(gè)屬性。既要防止那些添加修改了原型屬性的對(duì)象遍歷出多余的的結(jié)果,也要防止類似這種非標(biāo)準(zhǔn)屬性返回一個(gè)屬性的枚舉性不可控的對(duì)象的坑。 問題的引出 關(guān)于DOM元素的children屬性,以前我只在意它和childNodes屬性的區(qū)別:即children屬性只會(huì)返回子元素節(jié)點(diǎn)集合,而childNodes返回的...
前言:最近在細(xì)讀Javascript高級(jí)程序設(shè)計(jì),對(duì)于我而言,中文版,書中很多地方翻譯的差強(qiáng)人意,所以用自己所理解的,嘗試解讀下。如有紕漏或錯(cuò)誤,會(huì)非常感謝您的指出。文中絕大部分內(nèi)容引用自《JavaScript高級(jí)程序設(shè)計(jì)第三版》。 2. 原型對(duì)象與in操作符 有兩種方式使用in操作符: 單獨(dú)使用和在for-in循環(huán)中使用。 單獨(dú)使用時(shí),in操作符會(huì)通過對(duì)象能夠訪問給定屬性時(shí)返回true。 ==...
閱讀 2067·2021-10-12 10:12
閱讀 788·2021-09-24 09:47
閱讀 1188·2021-08-19 11:12
閱讀 3462·2019-08-29 13:06
閱讀 681·2019-08-26 11:43
閱讀 2563·2019-08-23 17:20
閱讀 1146·2019-08-23 16:52
閱讀 2594·2019-08-23 14:27