我們知道抽象在物件導向中的重要地位。
而JavaScript雖不是一門戶嚴格意義上的物件導向語言,但,它也可以有自己的物件導向實現。
當然包括抽象。
在JavaScript中,虛方法可以看作該類中沒有定義的方法,但已經通過this指標使用了.
通過下面的樣本可以看出: 1var tmp=function()
2{
3 {
4 this.ini.apply(this,arguments);
5 //這裡的arguments是建構函式的
6//this.ini通過this調用,但卻是未定義的。
7//將在其prototype中給出實現
8 }
9}
10//實現虛方法 ini,且提供給建構函式調用
11tmp.prototype.ini=function()
12{
13 alert(arguments[0]);
14}
15var tt=new tmp('a');
在prototype.js中,對抽象類別及類的建立有一段經典的實現:
如下: 1 var Class=
2 {
3 create:function()
4 {
5 return function() //返回一個匿名函數,也就是一個函數對象
6 {
7 this.ini.apply(this,arguments); //此時的arguments是函數對象的建構函式傳遞過來的參數對象
8 }
9 }
10 }
11
12 var tmp=Class.create();
13
14 //此時tmp相當於
15 //var tmp=function()
16 //{
17 // this.ini.apply(this,arguments);
18 //}
19 //可以通過alert(tmp.toString());看出
20 tmp.prototype.ini=function()
21 {
22 alert(arguments.length); //這裡的arguments是ini自身的參數
23 }
24 var ttt=new tmp('adf');
因為掉入了物件導向的泥潭,導致對Class.create居然久久不能明了
很汗,一個簡單的返回匿名函數居然將我迷糊了很久。
因此如上代碼記錄在此,以作備忘