摘要:原型相同對象的共有屬性也稱作原型原型鏈中所有的對象都是由它的原型對象繼承而來。說的直白點就是,所有原型鏈的屬性,最終都指向的是對象的而對象的指向的是。
原 型:相同對象的共有屬性也稱作原型
原型鏈:中所有的對象都是由它的原型對象繼承而來。而原型對象自身也是一個對象,它也有自己的原型對象,這樣層層上溯,就形成了一個類似鏈表的結(jié)構(gòu),這就是原型鏈
在JS中,不同類型對象都有各自相同類型共有的屬性,也有全部對象共有的屬性,如果每個對象的屬性都多帶帶出來,會非常浪費資源,
var a = new String("a"); var b = new Number(1); var c = new Boolean(true); //可以發(fā)現(xiàn),不管是字符串還是數(shù)值還是布爾,它們都有toString()屬性 a.toString ? toString() { [native code] } b.toString ? toString() { [native code] } c.toString ? toString() { [native code] }
所以JS將公共的屬性多帶帶出來【如全部對象共用屬性valueOf() ,toString()】,JS通過__proto__ 來指向每個類型對象的公共屬性。比如,有五個string對象五個number對象,每個對象的值都是不同的,但對象類型都是一樣的。
var a = new Number(1) var b = new Number(2) //雖然變量a和b的值不同,但是它們共有的屬性都是__proto__: Number console.log(a) Number {1} __proto__: Number [[PrimitiveValue]]: 1 console.log(b) Number {2} __proto__: Number [[PrimitiveValue]]: 2
string對象和number對象都有自己私有屬性(指相同對象類型的私有屬性),每個對象的__proto__都指向自己相同對象類型的私有屬性,相同對象類型的私有屬性也有自己的__proto__,它指向的是全部對象共有的屬性。__proto__: Number下面的__proto__又指向了全部對象共有的屬性。
全部對象共有的屬性,沒有__proto__屬性,它指向的是null,通過下面截圖看出普通的object對象__proto__下的屬性已經(jīng)沒有__proto__指到其他地方了。
說的直白點就是,所有原型鏈的__proto__屬性,最終都指向的是object對象的__proto__而object對象的__proto__指向的是null。
var 對象 = new 函數(shù)() 對象.__proto__ === 對象的構(gòu)造函數(shù).prototype // 推論 var number = new Number() number.__proto__ = Number.prototype var object = new Object() object.__proto__ = Object.prototype var function = new Function() function.__proto__ = Function.prototype // 另外,所有函數(shù)都是由 Function 構(gòu)造出來的,所以 Number.__proto__ = Function.prototype // 因為 Number 是函數(shù),是 Function 的實例 Object.__proto__ = Function.prototype // 因為 Object 是函數(shù),是 Function 的實例 Function.__proto__ == Function.prototye // 因為 Function 是函數(shù),是 Function 的實例!
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/104592.html
摘要:繼承原型鏈如果構(gòu)造函數(shù)或?qū)ο蟮脑椭赶驑?gòu)造函數(shù)或?qū)ο螅脑驮僦赶驑?gòu)造函數(shù)或?qū)ο螅源祟愅疲罱K的構(gòu)造函數(shù)或?qū)ο蟮脑椭赶虻脑汀? 繼承 原型鏈 如果構(gòu)造函數(shù)或?qū)ο驛的原型指向構(gòu)造函數(shù)或?qū)ο驜,B的原型再指向構(gòu)造函數(shù)或?qū)ο驝,以此類推,最終的構(gòu)造函數(shù)或?qū)ο蟮脑椭赶騉bject的原型。由此形成了一條鏈狀結(jié)構(gòu),被稱之為原型鏈。按照上述的描述,在B中定義的屬性或方法,可以在A中使用并不需要...
摘要:除此之外,在超類型的原型中定義的方法,對子類型而言也是不可兼得,結(jié)果所有類型都只能用構(gòu)造函數(shù)模式。創(chuàng)建對象增強對象指定對象繼承屬性這個例子的高效率體現(xiàn)在它只調(diào)用了一次構(gòu)造函數(shù)。 1、原型鏈 原型鏈的基本思想是利用原型讓一個引用類型繼承另一個引用類型的屬性和方法。構(gòu)造函數(shù)、原型和實例的關(guān)系:每個構(gòu)造函數(shù)都有一個原型對象;原型對象都包含著一個指向構(gòu)造函數(shù)的指針;實例都包含一個指向原型對象的...
摘要:實現(xiàn)原型鏈的方式如下讓原型對象稱為另一個構(gòu)造函數(shù)的實例這個實例繼承了的屬性上述代碼繼承是通過來實現(xiàn),創(chuàng)建的實例,并將該實例賦給。無疑,集兩者之大成,這才是最常用的繼承模式。 原型鏈 JavaScript的繼承主要依靠原型鏈來實現(xiàn)的。我們知道,構(gòu)造函數(shù),原型,和實例之間的關(guān)系:每個構(gòu)造函數(shù)都有一個原型對象,原型對象都包含一個指向構(gòu)造函數(shù)的指針,而實例都包含一個原型對象的指針。 實現(xiàn)原型鏈...
摘要:雖然在腳本中沒有標(biāo)準(zhǔn)的方式訪問,但在每個對象上都支持一個屬性,用于訪問其構(gòu)造函數(shù)的原型對象。說的是構(gòu)造函數(shù)和原型對象之間的關(guān)系,說的是實例對象和原型對象之間的關(guān)系。 前言 在 segmentfault 上看到這樣一道題目: var F = function(){}; Object.prototype.a = function(){}; Function.prototype.b = fu...
摘要:使用最多的繼承模式是組合繼承,這種模式使用原型鏈繼承共享的屬性和方法,而借用構(gòu)造函數(shù)繼承實例屬性。原型式繼承,可以在不必預(yù)先定義構(gòu)造函數(shù)的情況下實現(xiàn)繼承,其本質(zhì)是執(zhí)行給定對象的淺復(fù)制。 1、原型鏈實現(xiàn)繼承 function SuperType() { this.property = true; } SuperType.prototype.getSuperValue = func...
閱讀 3338·2021-11-22 15:22
閱讀 2862·2021-10-12 10:12
閱讀 2156·2021-08-21 14:10
閱讀 3822·2021-08-19 11:13
閱讀 2841·2019-08-30 15:43
閱讀 3223·2019-08-29 16:52
閱讀 438·2019-08-29 16:41
閱讀 1427·2019-08-29 12:53