JS類中定義原型方法的兩種實(shí)現(xiàn)的區(qū)別
更新時(shí)間:2007年03月08日 00:00:00 作者:
我們知道,給JavaScript類添加原形(prototype)方法是很簡(jiǎn)單的。而且常用的有下面這兩種方法,可是這兩種方法在使用時(shí)有區(qū)別嗎?
JScript Class:
function JSClass()
{
}
Extends prototype method:
JSClass.prototype.MethodA = function()
{
};
Or
function = JSClass.prototype.MethodA()
{
};
其實(shí)這兩個(gè)原形定義方式可以簡(jiǎn)化一下來討論,先把它們看作是兩個(gè)函數(shù),如下:
Foo1();
function Foo1()
{
alert(This is Foo1.);
}
和 Foo2();
var Foo2 = function()
{
alert(This is Foo2.);
}
運(yùn)行第一個(gè)顯然是不會(huì)有任何錯(cuò)誤的,可是運(yùn)行第二個(gè)就有問題了,這時(shí)系統(tǒng)會(huì)說:Microsoft JScript runtime error: Object expected。這就是說函數(shù)定義(Foo1)在腳本解析器中有最高的初始化優(yōu)先級(jí),這個(gè)很好理解。如果不優(yōu)先處理函數(shù),那么對(duì)于函數(shù)中的函數(shù)調(diào)用就沒有辦法處理了,假使我們先定fn1()再定義fn2(),卻從fn1中調(diào)fn2,那么就通不過解析了。為什么Foo2不能被初始化,F(xiàn)oo2的定義根本不是函數(shù)定義,它是一個(gè)標(biāo)準(zhǔn)的賦值語句,之所以能象標(biāo)準(zhǔn)函數(shù)一樣的使用Foo2(Foo2()),完全是因?yàn)樗赶虻氖且粋€(gè)函數(shù)對(duì)象的實(shí)例而已。
再來看原形方法導(dǎo)入里的兩種方式,就很簡(jiǎn)單了。并且不同的執(zhí)行優(yōu)先循序,也決了它們?cè)谑褂弥械牟煌?,看如下示例?nbsp;
<script language="javascript">
function NormalClass()
{
this.m_Property1 = P1 in Normal Class.;
this.m_Property2 = P2 in Normal Class.;
this.toString = function()
{
return [class NormalClass];
}
return new InnerClass();
function InnerClass()
{
this.m_Property1 = P1 in Inner Class.;
this.m_Property2 = P2 in Inner Class.;
this.toString = function()
{
return [class InnerClass];
}
}
InnerClass.prototype.Method1 = function()
{
alert(this.m_Property1);
};
function InnerClass.prototype.Method2()
{
alert(this.m_Property2);
};
}
</script>
執(zhí)行:
var nc = new NormalClass();
nc.Method1();
nc.Method2();
是什么效果?為什么?
JScript Class:
function JSClass()
{
}
Extends prototype method:
JSClass.prototype.MethodA = function()
{
};
Or
function = JSClass.prototype.MethodA()
{
};
其實(shí)這兩個(gè)原形定義方式可以簡(jiǎn)化一下來討論,先把它們看作是兩個(gè)函數(shù),如下:
Foo1();
function Foo1()
{
alert(This is Foo1.);
}
和 Foo2();
var Foo2 = function()
{
alert(This is Foo2.);
}
運(yùn)行第一個(gè)顯然是不會(huì)有任何錯(cuò)誤的,可是運(yùn)行第二個(gè)就有問題了,這時(shí)系統(tǒng)會(huì)說:Microsoft JScript runtime error: Object expected。這就是說函數(shù)定義(Foo1)在腳本解析器中有最高的初始化優(yōu)先級(jí),這個(gè)很好理解。如果不優(yōu)先處理函數(shù),那么對(duì)于函數(shù)中的函數(shù)調(diào)用就沒有辦法處理了,假使我們先定fn1()再定義fn2(),卻從fn1中調(diào)fn2,那么就通不過解析了。為什么Foo2不能被初始化,F(xiàn)oo2的定義根本不是函數(shù)定義,它是一個(gè)標(biāo)準(zhǔn)的賦值語句,之所以能象標(biāo)準(zhǔn)函數(shù)一樣的使用Foo2(Foo2()),完全是因?yàn)樗赶虻氖且粋€(gè)函數(shù)對(duì)象的實(shí)例而已。
再來看原形方法導(dǎo)入里的兩種方式,就很簡(jiǎn)單了。并且不同的執(zhí)行優(yōu)先循序,也決了它們?cè)谑褂弥械牟煌?,看如下示例?nbsp;
<script language="javascript">
function NormalClass()
{
this.m_Property1 = P1 in Normal Class.;
this.m_Property2 = P2 in Normal Class.;
this.toString = function()
{
return [class NormalClass];
}
return new InnerClass();
function InnerClass()
{
this.m_Property1 = P1 in Inner Class.;
this.m_Property2 = P2 in Inner Class.;
this.toString = function()
{
return [class InnerClass];
}
}
InnerClass.prototype.Method1 = function()
{
alert(this.m_Property1);
};
function InnerClass.prototype.Method2()
{
alert(this.m_Property2);
};
}
</script>
執(zhí)行:
var nc = new NormalClass();
nc.Method1();
nc.Method2();
是什么效果?為什么?
相關(guān)文章
js判斷輸入是否為正整數(shù)、浮點(diǎn)數(shù)等數(shù)字的函數(shù)代碼
js判斷輸入是否為正整數(shù)、浮點(diǎn)數(shù)等數(shù)字的函數(shù)代碼,學(xué)習(xí)js的朋友可以參考下。2010-11-11
詳解微信小程序開發(fā)聊天室—實(shí)時(shí)聊天,支持圖片預(yù)覽
這篇文章主要介紹了微信小程序?qū)崟r(shí)聊天支持圖片預(yù)覽,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05
dtree 網(wǎng)頁樹狀菜單及傳遞對(duì)象集合到j(luò)s內(nèi),動(dòng)態(tài)生成節(jié)點(diǎn)
最近要做一個(gè)聯(lián)系人的選擇框,選擇聯(lián)系人后,將聯(lián)系人的手機(jī)號(hào)添加到網(wǎng)頁的輸入框,可以支持復(fù)選框2012-04-04
JavaScript基于面向?qū)ο髮?shí)現(xiàn)的無縫滾動(dòng)輪播示例
這篇文章主要介紹了JavaScript基于面向?qū)ο髮?shí)現(xiàn)的無縫滾動(dòng)輪播,結(jié)合實(shí)例形式分析了JavaScript面向?qū)ο髮?shí)現(xiàn)的無縫滾動(dòng)輪播相關(guān)對(duì)象定義、初始化及功能實(shí)現(xiàn)技巧,需要的朋友可以參考下2020-01-01
Js數(shù)組扁平化實(shí)現(xiàn)方法代碼總匯
這篇文章主要介紹了Js數(shù)組扁平化實(shí)現(xiàn)方法代碼總匯,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11
JavaScript實(shí)現(xiàn)shuffle數(shù)組洗牌操作示例
這篇文章主要介紹了JavaScript實(shí)現(xiàn)shuffle數(shù)組洗牌操作,結(jié)合實(shí)例形式分析了javascript數(shù)組的定義、構(gòu)造、排序等相關(guān)操作技巧,需要的朋友可以參考下2019-01-01

