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

資訊專欄INFORMATION COLUMN

L - JavaScript繼承

joyvw / 2712人閱讀

摘要:類式繼承原型鏈繼承實(shí)現(xiàn)我是的方法我是的方法由于的實(shí)例能夠訪問,所以我們可以設(shè)置指向的實(shí)例。所以的實(shí)例可以訪問的實(shí)例以及,實(shí)現(xiàn)繼承缺點(diǎn)由于對(duì)象類型的賦值是引用賦值,如果父類實(shí)例化過程中有引用類型,那么子類的實(shí)例的這個(gè)屬性都指向同一內(nèi)存空間。

類式繼承(原型鏈繼承) 實(shí)現(xiàn)
function A(){
    this.a="a";
    this.arr=[1,2];
}
A.prototype.funA=function(){
    console.log("我是A的方法");
    
}
function B(){
    this.b="b";
}
B.prototype.funB=function(){
    console.log("我是B的方法");
}
B.prototype=new A();

var b1=new B();

由于A的實(shí)例能夠訪問A.prototype,所以我們可以設(shè)置B.prototype指向A的實(shí)例。所以B的實(shí)例可以訪問A的實(shí)例以及A.prototype,實(shí)現(xiàn)繼承

缺點(diǎn):

1.由于對(duì)象類型的賦值是引用賦值,如果父類A實(shí)例化過程中有引用類型,那么子類B的實(shí)例的這個(gè)屬性都指向同一內(nèi)存空間。

function A(){
    this.a="a";
    this.arr=[1,2];
}
A.prototype.funA=function(){
    console.log("我是A的方法");
    
}
function B(){
    this.b="b";
}
B.prototype.funB=function(){
    console.log("我是B的方法");
}
B.prototype=new A();

var b1=new B();
var b2=new B();

b1.arr.push(3);
console.log(b1.arr);    // [1, 2, 3]
console.log(b2.arr);    // [1, 2, 3]

2.如果父類的實(shí)例需要傳入一些參數(shù),那么兩個(gè)子類實(shí)例初始化時(shí)某一屬性值相同

function A(year){
    this.year=year;
}
function B(){
    this.b="b";
}
B.prototype=new A(18);

var b1=new B();
var b2=new B();
console.log(b1.color);    // 18
console.log(b2.color);    // 18

3.B.prototype中constructor指向不正確,因?yàn)?b>B.prototype指向了一個(gè)A的實(shí)例,所以本應(yīng)指向B的constructor指向了A

function A(year){
    this.year=year;
}
function B(){
    this.b="b";
}
B.prototype=new A(18);

var b1=new B();

b1.constructor===A    // true
構(gòu)造函數(shù)繼承(借用構(gòu)造函數(shù)繼承) 實(shí)現(xiàn)
function A(color){
    this.a="a";
    this.arr=[1,2];
    this.color=color;
}
A.prototype.funA=function(){
    console.log("我是A的方法");
    
}
function B(color){
    A.call(this,color);
}
B.prototype.funB=function(){
    console.log("我是B的方法");
}

var b1=new B("red");

console.log(b1)    // {a: "a", arr: Array(2), color: "red"}
優(yōu)點(diǎn)

解決了引用賦值問題,也可以自定義一些屬性了,constructor也指向B了,即解決了類式繼承的第一個(gè)、第二個(gè)問題以及第三個(gè)問題

缺點(diǎn)

很明顯,B除了調(diào)用了A這個(gè)函數(shù)外并沒有和A扯上什么關(guān)系,原型鏈?zhǔn)遣煌ǖ?無法訪問到應(yīng)該作為父類的A的prototype屬性),我甚至并不覺得這是一種繼承方式,但它為下面兩種方法奠定了基礎(chǔ)

b1.__proto__===B.prototype   // true
b1.__proto__.__proto__===Object.prototype    // true
組合繼承

說白了,就是將上述兩種方法的長處組合到一起,利用原型鏈實(shí)現(xiàn)原型屬性和方法的繼承,通過借用構(gòu)造函數(shù)實(shí)現(xiàn)對(duì)實(shí)例屬性的繼承

實(shí)現(xiàn)
function A(color){
    this.a="a";
    this.arr=[1,2];
    this.color=color;
}
A.prototype.funA=function(){
    console.log("我是A的方法");
    
}
function B(color,age){
    // 通過借用構(gòu)造函數(shù)實(shí)現(xiàn)對(duì)實(shí)例屬性的繼承
    A.apply(this,[color]);
    this.age=age;
}

// 利用原型鏈實(shí)現(xiàn)原型屬性和方法的繼承
B.prototype=new A();
B.prototype.constructor=B;

var b1=new B("red",18);
優(yōu)點(diǎn)

既通過在原型上定義方法實(shí)現(xiàn)了函數(shù)復(fù)用,又能夠保證每個(gè)實(shí)例都有它自己的屬性

缺點(diǎn)

調(diào)用了兩次父類的構(gòu)造函數(shù)

寄生組合式繼承(此方法最好) 實(shí)現(xiàn)
function A(color){
    this.a="a";
    this.arr=[1,2];
    this.color=color;
}
A.prototype.funA=function(){
    console.log("我是A的方法");
    
}
function B(color,age){
    A.apply(this,[color]);
    this.age=age;
}

B.prototype=Object.create(A.prototype);
B.prototype.constructor=B;

var b1=new B("red",18);
優(yōu)點(diǎn)

只需訪問一次父類的構(gòu)造函數(shù),避免了在子類的prototype上創(chuàng)建不必要、多余的屬性

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

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

相關(guān)文章

  • JavaScript instanceof運(yùn)算符深入分析

    摘要:注意基本變量類型不是對(duì)象類型,只有基本包裝類型才是對(duì)象類型。至于顯示的原型,在里用屬性表示,這個(gè)是原型繼承的基礎(chǔ)知識(shí),在這里就不在敘述了。 前言 如果你要開發(fā)一個(gè)復(fù)雜的產(chǎn)品,那么肯定少不了使用面向?qū)ο髾C(jī)制,當(dāng)然也避不開 Javascript 里面的繼承,instanceof 運(yùn)算符是原生 Javascript 語言中用來判斷實(shí)例繼承的操作符。所以我們有必要深入理解該運(yùn)算符! inst...

    zhangyucha0 評(píng)論0 收藏0
  • JavaScript繼承的六種方式

    這是 最近在學(xué)習(xí)js繼承時(shí)看了多篇文章以及自我總結(jié)的學(xué)習(xí)筆記。 目錄:一:原型鏈二:構(gòu)造函數(shù)三:原型鏈和構(gòu)造函數(shù)組合繼承四:原型式五:寄生式六:寄生組合式 1、原型鏈 function Super(){ this.name = lily; this.age = 21; this.arr = [1,2,3] } function Sub(){} Sub.prototype = new S...

    wujl596 評(píng)論0 收藏0
  • 從Vue源碼學(xué)習(xí)JavaScript之this instanceof Vue

    摘要:函數(shù)的調(diào)用有以下幾種方式作為對(duì)象方法調(diào)用,作為函數(shù)調(diào)用,作為構(gòu)造函數(shù)調(diào)用,和使用或調(diào)用。并且規(guī)范中說明,只有對(duì)象實(shí)現(xiàn)了方法。使用了回到上面作為構(gòu)造函數(shù)調(diào)用第一步創(chuàng)建一個(gè)空的對(duì)象,。第二步鏈接該對(duì)象即設(shè)置該對(duì)象的構(gòu)造函數(shù)到另一個(gè)對(duì)象,即。 在src/core/instance/index.js中 if (process.env.NODE_ENV !== production && !(t...

    付永剛 評(píng)論0 收藏0
  • 如何理解JavaScript的原型和原型鏈?

    摘要:之前有朋友問怎么去理解原型和原型鏈的問題。理解原型鏈的小技巧將箭頭視作泛化子類到父類關(guān)系那么圖中所有的虛線將構(gòu)成一個(gè)繼承層級(jí),而實(shí)線表示屬性引用。原型鏈?zhǔn)菍?shí)現(xiàn)繼承的重要方式,原型鏈的形成是真正是靠而非。 之前有朋友問怎么去理解原型和原型鏈的問題。這個(gè)問題,在面試中,很多同學(xué)經(jīng)常都會(huì)遇到。這里給大家講講,方便大家記憶。 JavaScript的特點(diǎn)JavaScript是一門直譯式腳本...

    xuexiangjys 評(píng)論0 收藏0
  • 如何理解JavaScript的原型和原型鏈?

    摘要:之前有朋友問怎么去理解原型和原型鏈的問題。理解原型鏈的小技巧將箭頭視作泛化子類到父類關(guān)系那么圖中所有的虛線將構(gòu)成一個(gè)繼承層級(jí),而實(shí)線表示屬性引用。原型鏈?zhǔn)菍?shí)現(xiàn)繼承的重要方式,原型鏈的形成是真正是靠而非。 之前有朋友問怎么去理解原型和原型鏈的問題。這個(gè)問題,在面試中,很多同學(xué)經(jīng)常都會(huì)遇到。這里給大家講講,方便大家記憶。 JavaScript的特點(diǎn)JavaScript是一門直譯式腳本...

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

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

0條評(píng)論

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