我的類庫功能預覽 ruby風格的繼承機制

2021-09-05 23:16:06 字數 3514 閱讀 8610

建立乙個新類,使用dom.factory方法,很明顯它是乙個工廠方法,批量生產各種各式的類。

var myfirstclass = dom.factory(

});var obj = new myfirstclass();

obj.sayhello();//hello world

繼承:

var animal = dom.factory(,

eat: function()

});var human = dom.factory(

});var peter = new human('peter');

peter.eat();//yummie

peter.speak();//peter said bla bla bla

var pat = dom.factory(

});var pat = new pat('pat',18);

alert(pat.name)//pat

alert(pat.age)//18

pat.speak();//pat said bla bla bla

方法鏈。就是在當前方法呼叫其父類的同名方法。

var girl = dom.factory(

});var fancygirl = dom.factory(

});var g = new girl;

alert(g.sayhello());

var f = new fancygirl;

alert(f.sayhello());

內部方法:

dom.require("lang");

dom.require("oop")

var person = dom.oop(,

secret: function().protect(), //定義其為內部方法,只能內部呼叫

describe: function(). #. i kid, i kid.".instead();

}});

var scott = new person('司徒正美');

// alert(scott.secret());//報錯 the method "secret" cannot be called.

alert(scott.describe());//hi, i'm scott. i sometimes like girly drinks. i kid, i kid.

singleton,標識生產的新類為單例類:

var god = dom.factory(

},singleton:true//注意這裡,使用singleton屬性

});var god = new god("耶和華");

god.alertname(); //alerts 耶和華

var lucifer = new god("撒旦");

lucifer.alertname(); //alerts 耶和華

alert(god === lucifer )//alerts true

alias,別名機制:

var array2 = dom.factory(,

setarray: function (arr) ,

tostring: function () ,

valueof: function () ,

pop:.pop,

push:.push,

shift:.shift,

unshift:.unshift,

reverse:.reverse,

indexof: function(el,index)

});array2.alias("indexof","contains")

var a = new array2(1,2,3,4,5);

alert(a)//測試tostring方法

alert(a.indexof(3))

alert(a.contains(3))//測試別名機制

include,包含,類似ruby,新增原型成員。

var movable = ,

fly:function()

}var recognition =,

smell:function()

}var robot = dom.factory(,

include:[movable,recognition]

});var chi = new robot("小嘰","chobits") ;

alert(chi.name);

chi.watch();

chi.fly();

extend,擴充套件,類似ruby,新增類成員。

var myclass = dom.factory({});

myclass.extend(,

alertpi:function()

});myclass.alert();//這是靜態(類)方法

myclass.alertpi();

var m = new myclass

m.alert()//報錯myclass is not defined

自擴充套件與自包含:

var module = ,

selfextended: function(klass)

};var myclass = dom.factory();

alert(myclass.prototype.boo); // -> 'boo'

alert(myclass.boo); // -> 'boo'

dom.geometry = {};

var point = dom.geometry.point = dom.factory(,

tostring: function() ,

clone: function() ,

eq: function(point) ,

//移動點到新的位置

offset: function(x, y)

this.x += x;

this.y += y;

return this;

},extend:

}});

新增原型成員。

var movable = ,

fly:function()

}var recognition =,

smell:function()

}var robot = oop(,

include:[movable,recognition]

});var chi = new robot("小嘰","chobits") ;

p(chi.name);

chi.watch();

chi.fly();

Ruby學習 Ruby類的使用

簡單的類定義和呼叫 如下 customer.rbclass customer g number 0 def initialize id,name,address m id id m name name m addr address g number 1 enddef display details ...

Windows Vista中的預覽功能簡單介紹

office 文件如word excel powerpoint檔案甚至e mail均得到支援。在windows vista中,要啟用預覽,設定非常簡單,單擊資源管理器工具欄中的 組織 在下拉列表中選擇 布局 然後選中 預覽窗格 即可。而若欲關閉預覽,則可按同樣的操作步驟,取消對 預覽窗格 的選擇。下...

我的程式設計命名風格

1.變數命名 1 全域性變數 採用大駝峰命名法,即每個詞開頭字母大寫,例如plaintext 2 區域性變數 採用小駝峰命名法,即第乙個詞開頭字母小寫,之後的每個詞開頭字母大寫,例如tmpdata 這樣命名的好處在於便於識別全域性變數。什麼時候使用下劃線?當第乙個詞表示乙個特定物件時,後面加下劃線,...