国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

如何更好地理解Javascript對象的自有屬性和原型繼承屬性

kviccn / 2905人閱讀

摘要:對象具有自有屬性,也有一些屬性是從原型對象繼承而來的。為了更好地理解對象自有屬性和繼承屬性下面的示例深入解釋了屬性的訪問和設(shè)置細(xì)節(jié)。在給對象的屬性賦值時(shí),是在原始對象上創(chuàng)建屬性或者對已有屬性賦值,而不會去修改原型鏈。

Javascript對象具有“自有屬性”(own property),也有一些屬性是從原型對象繼承而來的。為了更好地理解對象自有屬性和繼承屬性下面的示例深入解釋了屬性的訪問和設(shè)置細(xì)節(jié)。

function Obj () {
    this.z = 3;//自有屬性
}

//對象會繼承原型里的屬性
Obj.prototype.x = 1;
Obj.prototype.y = 2;

var o = new Obj();
console.log(o); //o的打印結(jié)果如下圖,可以看到其自有屬性和繼承自原型的屬性


假設(shè)要查詢對象o的屬性y, 如果o自有屬性中不存在y, 那么會繼續(xù)在o的原型對象中查找屬性y。如果原型對象中也沒有y,但這個(gè)原型對象也有原型,那么繼續(xù)在這個(gè)原型對象的原型上執(zhí)行查詢,直到?jīng)]找到y(tǒng)或者查找到一個(gè)原型是null的對象為止。 對象的原型屬性構(gòu)成了一個(gè)“鏈”。 通過這個(gè)“鏈”可以實(shí)現(xiàn)屬性的繼承。

現(xiàn)在假設(shè)給對象o的屬性x賦值,如果o中已經(jīng)有屬性x(自有屬性,不是繼承來的)那么這個(gè)賦值操作只改變這個(gè)已有屬性x的值。如果o中不存在屬性x, 那么賦值操作給o添加一個(gè)新屬性x。 如果之前o繼承了自己的原型對象的x屬性,那么這個(gè)繼承的屬性就被新創(chuàng)建的同名屬性屏蔽了。

o.x = 5;
console.log(o);
console.log(o.x);// 5


從打印結(jié)果可以看到對象創(chuàng)建了一個(gè)自有屬性x,屏蔽了之前繼承來的x值,這個(gè)操作只影響o這個(gè)單一對象,不會影響對象的原型里的x屬性,既不會影響其他繼承該原型的對象。

var b = new Obj();
console.log(b);
console.log(b.x);//1

我們再把對象o的x屬性delete掉,然后再訪問屬性“x”

delete o.x;//true
o.x; // 1

發(fā)現(xiàn)訪問o.x時(shí) x 再次指向了原型對象中的 x屬性。
實(shí)際上自有屬性和繼承屬性與靜態(tài)語言的實(shí)例屬性和類屬性很像,因此在編寫程序的時(shí)候最好不要把實(shí)例屬性和類屬性使用相同的名字,因?yàn)橄嗤值膶?shí)例屬性會屏蔽掉類屬性,但是當(dāng)你刪除實(shí)例屬性后,再使用相同的名稱訪問到的將是類屬性。

在給對象的屬性賦值時(shí),是在原始對象上創(chuàng)建屬性或者對已有屬性賦值,而不會去修改原型鏈。在Javascript中,只有查詢屬性時(shí)才會體會到繼承的存在,而設(shè)置屬性則和繼承無關(guān),該特性可以讓我們可以有選擇地覆蓋繼承的屬性。

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

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/85863.html

相關(guān)文章

  • JavaScript】【對象更好理解對象繼承

    摘要:每一個(gè)通過構(gòu)造函數(shù)實(shí)例化的對象和都具有構(gòu)造函數(shù)中的屬性,實(shí)例和構(gòu)造函數(shù)之間是構(gòu)造關(guān)系構(gòu)造過程中也形成了原型關(guān)系是的原型,是的原型,實(shí)例通過原型鏈找到原型中的屬性和方法。自定義和構(gòu)造函數(shù)的屬性是自有屬性,它們是對象本身的屬性。 繼承原理:實(shí)例中包含一個(gè)指向原型對象的內(nèi)部指針 實(shí)現(xiàn)方法:讓原型對象等于另一個(gè)類型的實(shí)例 關(guān)鍵點(diǎn): 構(gòu)造函數(shù)、原型對象、實(shí)例 實(shí)例屬性、原型方法 構(gòu)造關(guān)系、原型...

    Youngs 評論0 收藏0
  • 徹底搞懂JavaScript繼承

    摘要:這正是我們想要的太棒了毫不意外的,這種繼承的方式被稱為構(gòu)造函數(shù)繼承,在中是一種關(guān)鍵的實(shí)現(xiàn)的繼承方法,相信你已經(jīng)很好的掌握了。 你應(yīng)該知道,JavaScript是一門基于原型鏈的語言,而我們今天的主題 -- 繼承就和原型鏈這一概念息息相關(guān)。甚至可以說,所謂的原型鏈就是一條繼承鏈。有些困惑了嗎?接著看下去吧。 一、構(gòu)造函數(shù),原型屬性與實(shí)例對象 要搞清楚如何在JavaScript中實(shí)現(xiàn)繼承,...

    _ivan 評論0 收藏0
  • JS基礎(chǔ)05「對象

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

    frolc 評論0 收藏0
  • JavaScript 闖關(guān)記》之對象

    摘要:屬性名可以是包含空字符串在內(nèi)的任意字符串,但對象中不能存在兩個(gè)同名的屬性??蛻舳酥斜硎揪W(wǎng)頁結(jié)構(gòu)的對象均是宿主對象。這里的函數(shù)稱做構(gòu)造函數(shù),構(gòu)造函數(shù)用以初始化一個(gè)新創(chuàng)建的對象。通過關(guān)鍵字和構(gòu)造函數(shù)調(diào)用創(chuàng)建的對象的原型就是構(gòu)造函數(shù)的屬性的值。 對象是 JavaScript 的數(shù)據(jù)類型。它將很多值(原始值或者其他對象)聚合在一起,可通過名字訪問這些值,因此我們可以把它看成是從字符串到值的映射...

    rozbo 評論0 收藏0
  • JavaScript面向對象精要》讀書筆記

    摘要:解除引用的最佳手段是將對象變量設(shè)置為。字面形式允許你在不需要使用操作符和構(gòu)造函數(shù)顯示創(chuàng)建對象的情況下生成引用值。函數(shù)就是值可以像使用對象一樣使用函數(shù)因?yàn)楹瘮?shù)本來就是對象,構(gòu)造函數(shù)更加容易說明。 JavaScript(ES5)的面向?qū)ο缶?標(biāo)簽: JavaScript 面向?qū)ο?讀書筆記 2016年1月16日-17日兩天看完了《JavaScript面向?qū)ο缶罚▍⒓赢惒缴鐓^(qū)的活動(dòng)送...

    GitCafe 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<