/**
* 该方法的功能是实现一个OOP中的Class。
* 该方法可以传入两个参数,一个是Parent Class,另外一个就是Class自身的配置。
* 第一个参数为可选参数,在不使用此参数的时候,则类似于下面代码中的Pet的定义。
* 如果使用了第一个参数,泽类似于下面代码中的Dog的定义。
*
* 如果用户定义了Parent Class,则返回的Function需要增加一个属性$super,指向Parent Class。
*
* @param parent 可选参数,如果第一个参数不为Function,则相当于用户未指定Parent Class。
* @param options Class本身的配置。
* @returns {Function} 无论如何都需要返回一个Function。
*/
var Class = function(parent, options) {
};
var Pet = Class({
constructor: function(name, age) {
this.name = name;
this.age = age;
},
eat: function() {
console.log('eating');
},
sleep: function() {
console.log('sleeping');
},
toString: function() {
return '[' + this.name + ',' + this.age + ']';
}
});
var Dog = Class(Pet, {
constructor: function() {
Dog.$super.apply(this, arguments);
},
bark: function() {
console.log('barking');
}
});
var dog = new Dog('a stupid dog', 10);
console.log(dog instanceof Pet); // true
dog.eat(); // eating
dog.bark(); // barking
dog.sleep(); // sleeping
console.log(dog.toString()); // [a stupid dog,10]
写一段 TypeScript
在 http://www.typescriptlang.org/Playground 把它翻译成 JavaScript
挺方便的,也省得自己去实现读如继承之类的事情了。