着手开发更新的版本,把旧的版本放出来作记念。
"use strict";
(function(global,DOC){
var dom = global[DOC.URL.split("#")[0]];
dom.define("oop", ["lang"],function(){
//=========================================
// 核心模块 第一类工厂
//==========================================
var PROTO = "prototype", CTOR = "constructor";
var arr_extend = [PROTO, 'extend', 'include','inherit','ancestors','parent'];
var arr_include = [CTOR];
var one_object = dom.oneObject(['Object',"Array"]);
function add_modules(klass,props){
'extend,include'.replace(/\w+/g, function(name){
var modules = props[name];
if(one_object[dom.type(modules)]){
klass[name].apply(klass,[].concat(modules));
delete props[name];
}
});
}
function clean_module(module,props){
for(var name in props){
delete module[name]
}
return module;
}
var class_methods = {
inherit : function(parent) {
if (parent && parent[PROTO]) {
this[PROTO] = Object.create(parent[PROTO]);//高效设置原型链
this.parent = parent;
}
this.ancestors = [];
while (parent) {//收集所有父类,用于构建方法链时查找同名方法
this.ancestors.push(parent);
parent = parent.parent;
}
return this[PROTO][CTOR] = this;
},
extend: function(){//扩展类成员
for(var i = 0, n = arguments.length; i