標籤:傳遞參數 自己 不能 log push 通過 cti 成員 添加
1、繼承的概念:把別人的拿過來變成自己的,但自己不受影響。2、js中最基本的繼承就是原型繼承。3、原型繼承:通過修改子級建構函式的prototype指向父級建構函式的執行個體對象。 function Animal(name){ this.name=name; this.favor=[‘eating‘,‘sleeping‘]; } Cat.prototype=new Animal(‘Kitty‘); function Cat(color){ this.color=color; } var cat=new Cat(‘blue‘); cat.favor.push(‘swimming‘); var cat1=new Cat(‘pink‘); console.log(cat.name+cat.color+cat.favor); console.log(cat1.name+cat1.color+cat1.favor); 原型繼承的缺點:(1)不能父級建構函式傳遞參數。在這裡我新n建立了一個Cat的執行個體函數,但是這個函數裡面的name仍然是Kitty。(2)父級建構函式中的參考型別的資料會被自己建構函式執行個體共用。在cat的favor裡面添加了一個swimming,但是cat1也多出了一個swimming 4、借用建構函式繼承目的:把父級所有額屬性繼承過來。function Animal(name){ this.name=name; this.favor=[‘eating‘,‘sleeping‘]; }Animal.prototype.say=function(){ console.log(‘hello‘); }//這個行為沒有繼承 function Cat(color,name){ Animal.call(this,name) this.color=color; } var cat=new Cat(‘blue‘,‘Tom‘); cat.favor.push(‘swimming‘); var cat1=new Cat(‘pink‘,‘Candy‘); cat.say() console.log(cat.name+‘===‘+cat.color+‘===‘+cat.favor); cat1.say() console.log(cat1.name+‘===‘+cat1.color+‘===‘+cat1.favor);借用建構函式繼承方式解決了原型繼承的兩個缺點,但又有了新的問題,無法繼承父級建構函式原型中的成員。 5、組合繼承 function Animal(name){ this.name=name; this.favor=[‘eating‘,‘sleeping‘]; } Animal.prototype.say=function(){ console.log(‘hello‘); } function Cat(color,name){ Animal.call(this,name) this.color=color; } Cat.prototype=new Animal(); var cat=new Cat(‘blue‘,‘Tom‘); cat.favor.push(‘swimming‘); var cat1=new Cat(‘pink‘,‘Candy‘); cat.say() console.log(cat.name+‘===‘+cat.color+‘===‘+cat.favor); cat1.say() console.log(cat1.name+‘===‘+cat1.color+‘===‘+cat1.favor);缺點:雖然這種方法解決了上訴所有的問題,單數還有一個小小的缺點。父級建構函式中的屬性會有冗餘(浪費記憶體)。
js中的繼承問題