那對繼承,我是這麼看的。咱們這個繼承一般是針對父方法和子方法來說的,也就是說有兩個方法,一個父方法,一個子方法。子方法可以擁有父方法的所有屬性以及函數,那對於我們來說,js中常用的繼承有3種。 第一種原型鏈繼承:子對象他有一個預設屬性是叫__proto__,他是指向這個方法本身,而方法本身他是不帶父 ...
那對繼承,我是這麼看的。咱們這個繼承一般是針對父方法和子方法來說的,也就是說有兩個方法,一個父方法,一個子方法。子方法可以擁有父方法的所有屬性以及函數,那對於我們來說,js中常用的繼承有3種。
第一種原型鏈繼承:子對象他有一個預設屬性是叫__proto__,他是指向這個方法本身,而方法本身他是不帶父對象的方法或者屬性的,所以他得調用他的prototype 的屬性,這個prototype屬性他又指向一個對象, 對象是子方法的原型,那麼這個原型他又是用父方法實例化出來的,所以他又是他父對象的__proto__,這個__proto__又指向的父對象本身內個prototype,這個prototype 又調用他裡面的 屬性和方法,這樣的話就是他的原型鏈繼承。
例如:
function Parent(){
this.name = 'mike';
}
function Child(){
this.age = 12;
}
Child.prototype = new Parent();//Child繼承Parent,通過原型,形成鏈條
obj.prototype == 對象.__proto__
var p = new per();
alert(p.__proto__==per.prototype) //true
per.prototype.__proto__
第二個叫構造函數繼承, 構造函數繼承最重要的一點就是冒充,父對象定義在子對象
裡面,在子對象裡面可以引用父對象的屬性和方法,構造函數繼承我感覺比較簡單。
列如:
function myFun(){
this.name=
this.age=
this.show = function(){}
}
var obj1 = new myFun();
var obj2 new myFun();
再往後就是混合繼承,那就是既有構造,又有原型,這樣的一種繼承方式。
例如:
function myFun(){
this.name
this.show=function(){alert(123)}
}
myFun.prototype.age=12
myFun.prototype.info = function(){alert(456)}
myFun.prototype={
name:"zhangsan",
age :18,
show:function(){}
}
這就是我對繼承看法。
(call和apply之間的區別:兩種方法雖然都是繼承屬性,但書寫格式存在不同
這裡call方法是通過this 後跟著一個字元串系列
而apply方法同樣也是通過this 不過傳屬性則是由數組構成
)
call(this,name,age,str,demo) 字元串序列
apply(this,[name,age]) 數組
---恢復內容結束---
---恢復內容開始---
那對繼承,我是這麼看的。咱們這個繼承一般是針對父方法和子方法來說的,也就是說有兩個方法,一個父方法,一個子方法。子方法可以擁有父方法的所有屬性以及函數,那對於我們來說,js中常用的繼承有3種。
第一種原型鏈繼承:子對象他有一個預設屬性是叫__proto__,他是指向這個方法本身,而方法本身他是不帶父對象的方法或者屬性的,所以他得調用他的prototype 的屬性,這個prototype屬性他又指向一個對象, 對象是子方法的原型,那麼這個原型他又是用父方法實例化出來的,所以他又是他父對象的__proto__,這個__proto__又指向的父對象本身內個prototype,這個prototype 又調用他裡面的 屬性和方法,這樣的話就是他的原型鏈繼承。
例如:
function Parent(){
this.name = 'mike';
}
function Child(){
this.age = 12;
}
Child.prototype = new Parent();//Child繼承Parent,通過原型,形成鏈條
obj.prototype == 對象.__proto__
var p = new per();
alert(p.__proto__==per.prototype) //true
per.prototype.__proto__
第二個叫構造函數繼承, 構造函數繼承最重要的一點就是冒充,父對象定義在子對象
裡面,在子對象裡面可以引用父對象的屬性和方法,構造函數繼承我感覺比較簡單。
列如:
function myFun(){
this.name=
this.age=
this.show = function(){}
}
var obj1 = new myFun();
var obj2 new myFun();
再往後就是混合繼承,那就是既有構造,又有原型,這樣的一種繼承方式。
例如:
function myFun(){
this.name
this.show=function(){alert(123)}
}
myFun.prototype.age=12
myFun.prototype.info = function(){alert(456)}
myFun.prototype={
name:"zhangsan",
age :18,
show:function(){}
}
這就是我對繼承看法。
(call和apply之間的區別:兩種方法雖然都是繼承屬性,但書寫格式存在不同
這裡call方法是通過this 後跟著一個字元串系列
而apply方法同樣也是通過this 不過傳屬性則是由數組構成
)
call(this,name,age,str,demo) 字元串序列
apply(this,[name,age]) 數組