成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

細節(jié):js 原型對象與for-in 方法枚舉的問題

mumumu / 505人閱讀

摘要:原型對象與方法枚舉的問題原型屬性的屬性與的枚舉問題有的時候設置成時仍然會被方法枚舉到。新建立的原型對象的屬性,也是按照規(guī)則返回結(jié)果。最后,再重申一遍,如果原型對象合實例存在同名屬性,無論如何都會被枚舉。

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]],則按照規(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);
}

新建立的原型對象的屬性[[enumerable]],也是按照規(guī)則返回結(jié)果。

最后,再重申一遍,如果原型對象合實例存在同名屬性,無論如何都會被for-in 枚舉。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/78190.html

相關文章

  • JS高程讀書筆記--第六章原型繼承

    摘要:高程讀書筆記第六章理解對象創(chuàng)建自定義對象的方式有創(chuàng)建一個實例,然后為它添加屬性和方法。創(chuàng)建了自定義的構(gòu)造函數(shù)之后,其原型對象默認只會取得屬性至于其他方法都是從繼承而來的。 JS高程讀書筆記--第六章 理解對象 創(chuàng)建自定義對象的方式有創(chuàng)建一個Object實例,然后為它添加屬性和方法。還可用創(chuàng)建對象字面量的方式 屬性類型 ECMAScript在定義只有內(nèi)部采用的特性時,描述了屬性的各種特征...

    EasonTyler 評論0 收藏0
  • JS基礎05「對象

    摘要:對象是的數(shù)據(jù)類型。對象是動態(tài)的,可以隨時新增和刪除自有屬性。客戶端中表示網(wǎng)頁結(jié)構(gòu)的對象均是宿主對象。提供第二個可選參數(shù),用以對對象的屬性進行進一步描述。沒有原型的對象為數(shù)不多,就是其中之一。運算符的左側(cè)是屬性名字符串,右側(cè)是對象。 對象是 JavaScript 的數(shù)據(jù)類型。它將很多值(原始值或者其他對象)聚合在一起,可通過名字訪問這些值,因此我們可以把它看成是從字符串到值的映射。對象是...

    frolc 評論0 收藏0
  • [javascript 學習筆記] 1. 面向對象

    摘要:當作構(gòu)造函數(shù)來使用,作為普通函數(shù)來使用,當在全局作用域中調(diào)用一個函數(shù)時,對象總是指向?qū)ο蟆U{(diào)用構(gòu)造函數(shù)時會為實例添加一個指向最初原型的的指針,而把原型修改為另外一個對象就等于切斷了構(gòu)造函數(shù)于最初原型之間的聯(lián)系。 ECMA-262 把對象定義為 無序?qū)傩缘募?,其屬性可以包含基本值、對象或者函?shù)。 即對象是一組沒有特定順序的值。對象的每個屬性或方法都有一個名字,而每個名字都映...

    Berwin 評論0 收藏0
  • 遍歷DOM元素children屬性遇到

    摘要:小結(jié)這下我們可以得出結(jié)論了個屬性返回的對象不止能遍歷到子元素,還能遍歷到來自其原型的三個屬性。既要防止那些添加修改了原型屬性的對象遍歷出多余的的結(jié)果,也要防止類似這種非標準屬性返回一個屬性的枚舉性不可控的對象的坑。 問題的引出 關于DOM元素的children屬性,以前我只在意它和childNodes屬性的區(qū)別:即children屬性只會返回子元素節(jié)點集合,而childNodes返回的...

    weknow619 評論0 收藏0
  • JS面向對象程序設計之創(chuàng)建對象_工廠模式,構(gòu)造函數(shù)模式,原型模式-1

    前言:最近在細讀Javascript高級程序設計,對于我而言,中文版,書中很多地方翻譯的差強人意,所以用自己所理解的,嘗試解讀下。如有紕漏或錯誤,會非常感謝您的指出。文中絕大部分內(nèi)容引用自《JavaScript高級程序設計第三版》。 2. 原型對象與in操作符 有兩種方式使用in操作符: 單獨使用和在for-in循環(huán)中使用。 單獨使用時,in操作符會通過對象能夠訪問給定屬性時返回true。 ==...

    incredible 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<