詳解原型鏈,物件導向 下

2022-03-28 14:26:15 字數 1795 閱讀 5497

接上文:

1.類的宣告

function

animal ()

es6:

class animal2

}

2.生成例項 new animal(),new animal2,如果new的時候沒有引數,也可以不加括號

3.繼承的實現

>call方法(通過建構函式實現繼承)

缺點:無法繼承來自parent1的原型上的東西,只能部分繼承

>原型鏈繼承

缺點:改變了s1的屬性同時也會影響到s2,因為原型鏈中的原型物件是公用的

注:實際上new出來的新類.name是不存在的,通過查詢新類.__proto__.name才會有,所以是在原型鏈上查詢出來的

>組合方式(企業通用方法)

缺點:new 2次,建構函式被執行了2次

第一次:s3的new時候 child3的建構函式被執行了一次

第二次:child3的原型new parent3的時候

注:其實s3和s4分別有兩套name和play,乙份是call出來的,使用時直接s3.name,可以得出,乙份是原型鏈上的s3.__proto__.name可以得出,該方法只是在call的基礎上把parent的原型鏈繼承給了child3而已

>優化

缺點:constroctor指向父類

>優化

測試過程中也可以

function

parent4 ()

function

child4 ()

child4.prototype =parent4.prototype;

child4.prototype.constructor=child4;

var s5 = new

child4();

var s6 = new

child4();

console.log(s5, s6);

console.log(s5

instanceof child4, s5 instanceof

parent4);

console.log(s5.constructor);

將constructor設定回來即可,但是父類和子類的

constructor都變成子類了

>終極優化

var o=object.create(parent)是把引數parent當做原型物件傳給o的,所以o並不具備parent的屬性,但是o的__proto__具有,因為o.__proto__===parent

總結:原型鏈繼承由於new的時候是把原型物件上的屬性複製給新物件,於是新物件相當於有兩個相同屬性,如果新物件為o,那麼他既有o.name,又有o.__proto__.name,修改兩個的時              候互不影響,但是會影響原型鏈就是原型物件的.prototype,繼而影響所有new出來的新物件

如有錯誤,請多指正

物件導向 建立物件 原型鏈 繼承

字面量建立物件 使用json形式建立物件,適用於建立單個物件.json js物件表示法,由鍵值對組成,每乙個鍵值對之間使用冒號連線,每一對鍵值對之間使用逗號隔開.var obj console.log obj console.log typeof obj object console.log obj...

JS物件導向之原型鏈

什麼是原型鏈?原型鏈就是例項物件與原型之間的連線 function example example.prototype.num 20 如果注釋此行以及上一行,結果是什麼呢?object.prototype.num 30 var e1 new example console.log e1.num 有這...

物件導向 prototype 原型鏈 繼承

物件導向 oop,即 object oriented 是相對於面向過程來講的,簡單說就是把資料和方法組合封裝起來成為乙個整體,提高軟體的重用性 靈活性和擴充套件性。物件導向特點 當建立的物件較多時,會有可共用的屬性,此時就可用prototype。比如我們用array來建立乙個例項時,不用我們定義,它...