What’s KMD?
亂世出英雄,KMD名字的由來充滿了殺氣。
Kill AMD and CMD
KMD為替代混亂的AMD和CMD世界而生,一統天下。或者讓這個混亂的世界更加混亂,導致:
KMD AMD CMD三分天下
KMD的目標從來都是遠大的:
JS工程化終極解決方案
使用KMDjs的工程師從來都是:
尼瑪,什么東西,這么NB?
KMD規范
0.KMD只暴露兩個關鍵字,一個是define用來定義模塊和加載模塊,一個是kmdjs,用來使用kmdjs.config
1.通過define定義命名空間和類
define("MyApp.User", { init: function (name,age) { this.name = name; this.age = age; }, say: function () { alert("my name is " + this.name); } })
其中MyApp是命名空間,User是類
2.不允許只定義類,不定義命名空間,如:下面的做法是錯誤的:
define("User", { init: function (name,age) { this.name = name; this.age = age; }, say: function () { alert("my name is " + this.name); } })
3.通過statics給類定義靜態屬性和方法:
define("NS2.Model.Animate",["NS2"], { statics: { Version: "1.0", CreateGUID: function () { return 2; } }, init: function (name, age) { this.name = name; this.age = age; } })
4.通過冒號實現繼承:
define("NS2.Model.User:NS2.Model.Animate", { statics: { CreateGUID: function () { return 3; } }, init: function (name, age) { this.name = name; this.age = age; } })
4.靜態屬性可繼承,可覆蓋,父類的保持不變
5.通過define方法引用命名空間,引用之后,該命名空間下的類全部可以使用
require(["NS", "NS2", "NS2.Model"], function () { //這里面可以使用上面三個命名空間下的所有類 })
這里不需要擔心會加載大量Class,KMDjs會拿到function(){}去分析用來哪個命名空間下的哪個類,然后按需加載執行。
6.通過_super訪問父類方法:
define("NS2.Model.User:NS2.Model.Animate", { init: function (name, age) { this._super(name, age); this.sex = "男"; } })
8.js文件名和類名一致
9.類名和命名空間以及文件路徑的關系在kmdjs.config方法配置
KMDjs網址
http://kmdjs.org/ 備案中..
http://kmdjs.github.io/ kmdjs在github官網
http://htmlcssjs.duapp.com/kmdjs/ kmdjs在BAE
kmdjs@QQ.com kmdjs官方郵箱
@當耐特 kmdjs官方微博
總結
AMD and CMD are dead. That's all.
我不是認真,我就是為了輸贏.