|
JScript Class:
function JSClass()
{
}
Extends prototype method:
JSClass.prototype.MethodA = function()
{
};
Or
function = JSClass.prototype.MethodA()
{
};
其實這兩個原形定義方式可以簡化一下來討論,先把它們看作是兩個函數,如下:
Foo1();
function Foo1()
{
alert(This is Foo1.);
}
和 Foo2();
var Foo2 = function()
{
alert(This is Foo2.);
}
運行第一個顯然是不會有任何錯誤的,可是運行第二個就有問題了,這時系統(tǒng)會說:Microsoft JScript runtime error: Object expected。這就是說函數定義(Foo1)在腳本解析器中有最高的初始化優(yōu)先級,這個很好理解。如果不優(yōu)先處理函數,那么對于函數中的函數調用就沒有辦法處理了,假使我們先定fn1()再定義fn2(),卻從fn1中調fn2,那么就通不過解析了。為什么Foo2不能被初始化,Foo2的定義根本不是函數定義,它是一個標準的賦值語句,之所以能象標準函數一樣的使用Foo2(Foo2()),完全是因為它指向的是一個函數對象的實例而已。
再來看原形方法導入里的兩種方式,就很簡單了。并且不同的執(zhí)行優(yōu)先循序,也決了它們在使用中的不同,看如下示例:
<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();
是什么效果?為什么?
JavaScript技術:JS類中定義原型方法的兩種實現的區(qū)別,轉載需保留來源!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。