mass Framework class模块 v11
去掉mutators 对象,它的方法绑到$.factory上,并且它支持继续用户用其他方法定义的“类”
//=========================================
// 类工厂模块 v11 by 司徒正美
//==========================================
define("class", ["$lang"], function( $ ){
var
unextend = $.oneObject(["_super","prototype", 'extend', 'implement' ]),
rconst = /constructor|_init|_super/,
classOne = $.oneObject('Object,Array,Function');
function expand(klass,props){
'extend,implement'.replace( $.rword, function(name){
var modules = props[name];
if( classOne[ $.type( modules) ] ){
klass[name].apply( klass,[].concat( modules ) );
delete props[name];
}
});
return klass;
}
var hash = {
inherit : function( parent,init ) {
var bridge = function() { }
if( typeof parent == "function"){
for(var i in parent){//继承类成员
this[i] = parent[i];
}
bridge.prototype = parent.prototype;
this.prototype = new bridge ;//继承原型成员
this._super = parent;//指定父类
if(!this._init){
this._init = [parent]
}
}
this._init = (this._init || []).concat();
if( init ){
this._init.push(init);
}
this.toString = function(){
return (init || bridge) + ""
}
var proto = this.prototype;
proto.setOptions = function(){
var first = arguments[0];
if( typeof first === "string" ){
first = this[first] || (this[first] = {});
[].splice.call( arguments, 0, 1, first );
}else{
[].unshift.call( arguments,this );
}
$.Object.merge.apply(null,arguments);
return this;
}
return proto.constructor = this;
},
implement:function(){
var target = this.prototype, reg = rconst;
for(var i = 0, module; module = arguments[i++]; ){
module = typeof module === "function" ? new module :module;
Object.keys(module).forEach(function(name){
if( !reg.test(name) ){
target[name] = module[name];
}
}, this );
}
return this;
},
extend: function(){//扩展类成员
var bridge = {}
for(var i = 0, module; module = arguments[i++]; ){
$.mix( bridge, module );
}
for( var key in bridge ){
if( !unextend[key] ){
this[key] = bridge[key]
}
}
return this;
}
};
$.factory = function( obj ){
obj = obj || {};
var parent = obj.inherit //父类
var init = obj.init ; //构造器
delete obj.inherit;
delete obj.init;
var klass = function () {
for( var i = 0 , init ; init = klass._init[i++]; ){
init.apply(this, arguments);
}
};
$.mix( klass, hash ).inherit( parent, init );//添加更多类方法
return expand( klass, obj ).implement( obj );
}
$.mix($.factory, hash)
return $
});
机器瞎学/数据掩埋/模式混淆/人工智障/深度遗忘/神经掉线/计算机幻觉/专注单身二十五年
浙公网安备 33010602011771号