langx定义了一些函数用于定义skylarkjs类,它们支持skylarkjs中的标准面向对象概念。 JavaScript使用基于原型的继承,而不是基于类的继承(大多数编程语言使用,更适合大规模应用程序开发)。 Skylark.js使用langx.klass()函数创建的类型模拟了基于类的继承的能力。
使用klass(),可以定义一个新的类类型。
In scripts/my/Person.js:
define(["skylarkjs"],function(skylarkjs){ return skylarkjs.langx.klass({ klassName : "Person", init : function() { }, hi : function(guest) { console.log("hi "+guest+",my name is person"); } }); });
使用这个类:
define(["scripts/my/Person"],function(Person) { return function callPersonHi(guest) { var p1 = new Persion(); p1.hi(guest); }; });
klassName用于指定类名,这个名字会被显示在观察类实例时的调试窗口中, 这对于调试JavaScript程序非常有帮助。
使用inherit()创建继承现有类的新类:
define(["scripts/my/Person"],function(Person) { return Person.inherit({ klassName : "Man", init : function() { }, hi : function(guest) { console.log("hi "+guest+",my name is man"); } }); });
当然,klass()也有这个功能:
define(["skylarkjs","scripts/my/Person"],function(Person) { return skylarkjs.langx.klass({ klassName : "Man", init : function() { }, hi : function(guest) { console.log("hi "+guest+",my name is man"); } },Person); });
使用overrided()调用父类方法。 例如,在man类的hi()方法中,调用父类Person的同名方法:
hi : function(guest) { this.overrided(guest); console.log("hi "+guest+",my name is man"); }
使用partial()来为已存在的类添加方法。
define(["scripts/my/Person"],function(Person) { Person.partial({ hi2 : function(guest) { console.log("hi2 "+guest+",my name is man"); } }); return Person; });