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