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

資訊專欄INFORMATION COLUMN

JavaScript 之原型與周邊

codecook / 880人閱讀

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

簡介

如果之間學(xué)習(xí)過cpp 、java 之類的語言,都會知道他們是可以基于類 class 進行繼承的, 在JavaScript 中,并沒有類繼承這個概念,要實現(xiàn)JavaScript 中的繼承,需要原型來幫助。

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

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

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

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

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

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

在這段代碼中,就一直維護著一個原型鏈,抽象化的理解起來可能是這樣的:

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

很好去理解,test 是從Bar.prototypeFoo.prototype 中繼承下來的,所以他能夠訪問Foo 實例屬性中的value 。

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

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

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

hasOwnProperty

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

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

比如在下面的例子中

Oboject.prototype.bar = 1;

var foo = {
  value: 2;
};

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

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

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

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

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

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

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

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

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

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

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

相關(guān)文章

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

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

    changfeng1050 評論0 收藏0
  • 如何安全過渡到公共云

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

    Terry_Tai 評論0 收藏0
  • JavaScript深入原型原型

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

    Songlcy 評論0 收藏0
  • 進擊JavaScript(四)原型原型

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

    XBaron 評論0 收藏0

發(fā)表評論

0條評論

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