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

資訊專(zhuān)欄INFORMATION COLUMN

JavaScript 之原型與周邊

codecook / 881人閱讀

摘要:除此之外,原型是共享的,如果我們有的寫(xiě)法,改變這兩個(gè)對(duì)象任何一個(gè)的原型都會(huì)影響另外一個(gè),這在大多的情況下是不可取的。當(dāng)對(duì)象查找一個(gè)屬性的時(shí)候,他會(huì)沿著原型鏈一直往上追蹤,直到直到為之。在性能方面,原則上應(yīng)該盡量避免原型鏈太長(zhǎng)。

簡(jiǎn)介

如果之間學(xué)習(xí)過(guò)cppjava 之類(lèi)的語(yǔ)言,都會(huì)知道他們是可以基于類(lèi) class 進(jìn)行繼承的, 在JavaScript 中,并沒(méi)有類(lèi)繼承這個(gè)概念,要實(shí)現(xiàn)JavaScript 中的繼承,需要原型來(lái)幫助。

比如在下面的這段代碼中:

function Foo () {
  this.value = 1;
};

Foo.prototype = {
  method: function () {};
};

//設(shè)置Bar的原型為Foo()的實(shí)例
Bar.prototype = new Foo();
Bar.prototype.foo = "Hello World";

//修正Bar的constructor
Bar.prototype.constructor = Bar;

//創(chuàng)建一個(gè)Bar的實(shí)例
var test = new Bar();

在這段代碼中,就一直維護(hù)著一個(gè)原型鏈,抽象化的理解起來(lái)可能是這樣的:

test [Bar的實(shí)例]
     Bar.prototype [Foo的實(shí)例]
         {foo: "Hello World!"}
         Foo.prototype
            {method: function(){}}
            Object.prototype
                {...}

很好去理解,test 是從Bar.prototypeFoo.prototype 中繼承下來(lái)的,所以他能夠訪(fǎng)問(wèn)Foo 實(shí)例屬性中的value

需要注意的是,在 new Bar 操作中,并不會(huì)重新創(chuàng)建一個(gè)Foo 的實(shí)例,而是會(huì)重復(fù)的使用在他的原型上的那個(gè)實(shí)例。

除此之外,原型是共享的,如果我們有Foo.prototype = Bar.prototype 的寫(xiě)法,改變這兩個(gè)對(duì)象任何一個(gè)的原型都會(huì)影響另外一個(gè),這在大多的情況下是不可取的。

當(dāng)對(duì)象查找一個(gè)屬性的時(shí)候,他會(huì)沿著原型鏈一直往上追蹤,直到直到為之。當(dāng)然 Object.prototypr 就是這個(gè)鏈的最后一層了,如果還是沒(méi)找到,就會(huì)返回undefined

hasOwnProperty

在性能方面,原則上應(yīng)該盡量避免原型鏈太長(zhǎng)。正如用for ... in ... 去遍歷的時(shí)候,他會(huì)去遍歷整個(gè)原型鏈,這往往在比較高的性能要求或者普通的遍歷中是不可取的。

為了去判斷一個(gè)對(duì)象包含的屬性是他本身就有的還是在原型鏈上的,需要使用繼承在Object prototype 上的hasOwnProperty 方法。

比如在下面的例子中

Oboject.prototype.bar = 1;

var foo = {
  value: 2;
};

foo.var          //通過(guò)原型鏈繼承自O(shè)bject,輸出1
"bar" in foo;    //通過(guò)整個(gè)原型鏈進(jìn)行查找,輸出true

foo.hasOwnProperty("bar");    //false
foo.hasOwnProperty("value")   //true

for ... in ... 的遍歷中,一般建議使用hasOwnProperty 的方法。

需要注意的是: javascript并沒(méi)有對(duì)hasOwnProperty 做相關(guān)的保護(hù),如果恰巧對(duì)象有這個(gè)叫做hasOwnProperty 的屬性,那么產(chǎn)生的結(jié)果應(yīng)該不是我們所期待的。比如像下面這樣:

var foo = {
  hasOwnProperty: function () { return flase};
  bar: "1";
};

foo.hasOwnProperty("bar") //正如你猜的那樣,返回的值永遠(yuǎn)是false

這時(shí)候可能需要做的就是調(diào)用外部的hasOwnproperty, 對(duì),就是用call 或者apply。像下面這樣:

//返回true
Object.hasOwnProperty.call(foo, "bar");
Object.hasOwnProperty.apply(foo, ["bar"]);

原文鏈接:http://life.rccoder.net/javascript/1207.html

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

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

相關(guān)文章

  • 體驗(yàn)javascript美6:如果你覺(jué)得什么都會(huì)了或者不知道js學(xué)什么了看這里-面向?qū)ο缶幊?/b>

    摘要:面向過(guò)程函數(shù)式編程面向?qū)ο缶幊痰诙€(gè)并不是大家理解的那樣,我們先說(shuō)舉個(gè)現(xiàn)實(shí)例子就明白了。多說(shuō)一句函數(shù)是編程是非常強(qiáng)大也是我最喜歡的,以后再說(shuō),我們先說(shuō)面向?qū)ο缶幊獭? 概述 當(dāng)大家已經(jīng)把js的語(yǔ)言基礎(chǔ)理解了,然后能夠?qū)懗鲆恍┖?jiǎn)單的例子了,這個(gè)時(shí)候基本上達(dá)到了一年工作經(jīng)驗(yàn)的水平,而自己能夠獨(dú)立的寫(xiě)一些小功能,完成一些小效果,或者臨摹修改一些比較復(fù)雜的插件的時(shí)候差不多就是兩年工作經(jīng)驗(yàn)的水平,...

    changfeng1050 評(píng)論0 收藏0
  • 如何安全過(guò)渡到公共云

    摘要:簡(jiǎn)而言之,公司需要采取主動(dòng)系統(tǒng)的方法,使網(wǎng)絡(luò)安全功能可以適應(yīng)公共云。將開(kāi)發(fā)運(yùn)維應(yīng)用于網(wǎng)絡(luò)安全如果開(kāi)發(fā)人員可以在短短幾秒內(nèi)啟動(dòng)服務(wù)器,但必須等待兩周的時(shí)間才能讓安全團(tuán)隊(duì)認(rèn)同配置,這會(huì)削弱公共的云靈活性所帶來(lái)的價(jià)值。隨著企業(yè)不斷擴(kuò)大對(duì)公共云的使用,它們必須反思如何保護(hù)數(shù)據(jù)和應(yīng)用程序,并實(shí)施四項(xiàng)關(guān)鍵實(shí)踐。經(jīng)過(guò)長(zhǎng)時(shí)間的實(shí)驗(yàn),龍頭企業(yè)正在認(rèn)真考慮大規(guī)模采用公共云。在過(guò)去幾年中,很多公司已經(jīng)改變了IT戰(zhàn)...

    Terry_Tai 評(píng)論0 收藏0
  • JavaScript深入原型原型

    摘要:深入系列的第一篇,從原型與原型鏈開(kāi)始講起,如果你想知道構(gòu)造函數(shù)的實(shí)例的原型,原型的原型,原型的原型的原型是什么,就來(lái)看看這篇文章吧。讓我們用一張圖表示構(gòu)造函數(shù)和實(shí)例原型之間的關(guān)系在這張圖中我們用表示實(shí)例原型。 JavaScript深入系列的第一篇,從原型與原型鏈開(kāi)始講起,如果你想知道構(gòu)造函數(shù)的實(shí)例的原型,原型的原型,原型的原型的原型是什么,就來(lái)看看這篇文章吧。 構(gòu)造函數(shù)創(chuàng)建對(duì)象 我們先...

    Songlcy 評(píng)論0 收藏0
  • 進(jìn)擊JavaScript(四)原型原型

    摘要:每一個(gè)由構(gòu)造函數(shù)創(chuàng)建的對(duì)象都會(huì)默認(rèn)的連接到該神秘對(duì)象上。在構(gòu)造方法中也具有類(lèi)似的功能,因此也稱(chēng)其為類(lèi)實(shí)例與對(duì)象實(shí)例一般是指某一個(gè)構(gòu)造函數(shù)創(chuàng)建出來(lái)的對(duì)象,我們稱(chēng)為構(gòu)造函數(shù)的實(shí)例實(shí)例就是對(duì)象。表示該原型是與什么構(gòu)造函數(shù)聯(lián)系起來(lái)的。 本文您將看到以下內(nèi)容: 傳統(tǒng)構(gòu)造函數(shù)的問(wèn)題 一些相關(guān)概念 認(rèn)識(shí)原型 構(gòu)造、原型、實(shí)例三角結(jié)構(gòu)圖 對(duì)象的原型鏈 函數(shù)的構(gòu)造函數(shù)Function 一句話(huà)說(shuō)明什么...

    XBaron 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<