Open army8735 opened 10 years ago
2.0的确精简了很多,也较为易读了。 更新了原有的jsPerf,加了2.0的性能测试,同时添加了我自己的AClass。 http://jsperf.com/class-perfs/11 chrome有时刷不出来图,FF可以,真奇特。
arale的API都知道,不多说,说说我的:
var Animal = AClass(function(name) { this.name = name; }).methods({ talk: function() { return 'I am ' + this.name; } }); var Bird = Animal.extend(function(name) { Animal.call(this, name); }).methods({ fly: function() { return 'I am flying'; } });
比较而言:
暂时这些想法,贴下我的源码,可以精简掉static:
define('Class', function() { function inheritPrototype(subType, superType) { var prototype = Object.create(superType.prototype); prototype.constructor = subType; subType.prototype = prototype; //继承static变量 Object.keys(superType).forEach(function(k) { subType[k] = superType[k]; }); return subType; } function wrap(fn) { fn.extend = function(sub) { inheritPrototype(sub, fn); return wrap(sub); } fn.methods = function(o) { Object.keys(o).forEach(function(k) { fn.prototype[k] = o[k]; }); return fn; }; fn.statics = function(o) { Object.keys(o).forEach(function(k) { fn[k] = o[k]; }); return fn; }; return fn; } function klass(cons) { return wrap(cons || function() {}); } klass.extend = inheritPrototype; return klass; });
提供之前的思路吧,或许对师兄姐们有所帮助~ 最后,期待下ES6的class,然后希望能寻找到一种安全等价无需额外附加的转换方法~目前我想到的要加个superClass才行(因为有super方法)。
class Father() { constructor(a) { this.a = a; } method() { return this.a; } } class Child() { constructor(a) { super(a); } method() { return super.method(); } }
2.0的确精简了很多,也较为易读了。 更新了原有的jsPerf,加了2.0的性能测试,同时添加了我自己的AClass。 http://jsperf.com/class-perfs/11 chrome有时刷不出来图,FF可以,真奇特。
arale的API都知道,不多说,说说我的:
比较而言:
暂时这些想法,贴下我的源码,可以精简掉static:
提供之前的思路吧,或许对师兄姐们有所帮助~ 最后,期待下ES6的class,然后希望能寻找到一种安全等价无需额外附加的转换方法~目前我想到的要加个superClass才行(因为有super方法)。