javascript的方法

1. javascript的方法可以分為三類:

a 類方法;b 對(duì)象方法;c 原型方法

例子:

//對(duì)象方法

function People(name){?

this.name=name;

this.Introduce=function(){

alert("My?name?is"+this.name);

} }

//類方法

People.Run=function(){

alert("I?can?run");

}

//原型方法

People.prototype.IntroduceChinese=function(){

alert("我的名字是"+this.name);

}

//測(cè)試

var p1=newPeople("Windking");

p1.Introduce();

People.Run();

p1.IntroduceChinese();


prototype是什么含義?

javascript中的每個(gè)對(duì)象都有prototype屬性,Javascript中對(duì)象的prototype屬性的解釋是:返回對(duì)象類型原型的引用。

A.prototype = new B();

理解prototype不應(yīng)把它和繼承混淆。A的prototype為B的一個(gè)實(shí)例,可以理解A將B中的方法和屬性全部克隆了一遍。A能使用B的方法和屬性。這里強(qiáng)調(diào)的是克隆而不是繼承。可以出現(xiàn)這種情況:A的prototype是B的實(shí)例,同時(shí)B的prototype也是A的實(shí)例。

先看一個(gè)實(shí)驗(yàn)的例子:

function baseClass(){

this.showMsg=function() { alert("baseClass::showMsg"); }

}

function extendClass(){}

extendClass.prototype=newbaseClass();

var instance=newextendClass();

instance.showMsg();//顯示baseClass::showMsg

我們首先定義了baseClass類,然后我們要定義extentClass,但是我們打算以baseClass的一個(gè)實(shí)例為原型,來(lái)克隆的extendClass也同時(shí)包含showMsg這個(gè)對(duì)象方法。

extendClass.prototype = new baseClass()就可以閱讀為:extendClass是以baseClass的一個(gè)實(shí)例為原型克隆創(chuàng)建的。

測(cè)試1:

function baseClass(){

this.showMsg=function(){alert("baseClass::showMsg");}

}

function extendClass(){

this.showMsg=function()

{ alert("extendClass::showMsg"); } }

extendClass.prototype=newbaseClass();

var instance=newextendClass();

instance.showMsg();//顯示extendClass::showMsg

如果extendClass中本身包含有一個(gè)與baseClass的方法同名的方法,函數(shù)運(yùn)行時(shí)會(huì)先去本體的函數(shù)中去找,如果找到則運(yùn)行,找不到則去prototype中尋找函數(shù)。或者可以理解為prototype不會(huì)克隆同名函數(shù)。

測(cè)試2:

extendClass.prototype=newbaseClass();

var instance=newextendClass();

varbaseinstance=newbaseClass();

baseinstance.showMsg.call(instance);//顯示baseClass::showMsg

這里的baseinstance.showMsg.call(instance);閱讀為“將instance當(dāng)做baseinstance來(lái)調(diào)用,調(diào)用它的對(duì)象方法showMsg”

好了,這里可能有人會(huì)問,為什么不用baseClass.showMsg.call(instance);

這就是對(duì)象方法和類方法的區(qū)別,我們想調(diào)用的是baseClass的對(duì)象方法

測(cè)試總結(jié):

function baseClass(){

this.showMsg=function(){ alert("baseClass::showMsg");}

this.baseShowMsg=function(){

alert("baseClass::baseShowMsg");

}

}

baseClass.showMsg=function(){

alert("baseClass::showMsg?static");

}

function extendClass(){

this.showMsg=function(){alert("extendClass::showMsg");}

}

extendClass.showMsg=function(){

alert("extendClass::showMsg?static")

}

extendClass.prototype=newbaseClass();

var instance=newextendClass();

instance.showMsg();//顯示extendClass::showMsg

instance.baseShowMsg();//顯示baseClass::baseShowMsg

instance.showMsg();//顯示extendClass::showMsg

baseClass.showMsg.call(instance);//顯示baseClass::showMsg?static

varbaseinstance=newbaseClass();

baseinstance.showMsg.call(instance);//顯示baseClass::showMsg

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容