类
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;
});