oop.js

oop.js


/**
* 面向对象核心类.
*
* @author bisoft
* @version 1.0 2013-07-23
*/
(function(global) {

// 强制覆盖
var override = function(s, t) {
var i;
for(i in t) {
s[i] = t[i];
}
};

// 原型继承
var extend = function(subclass, supclass, options) {
if (subclass.prototype !== Object.prototype) {
var Root0 = function() {};
Root0.prototype = supclass.prototype;
var sbp = subclass.prototype = new Root0();
sbp.constructor = subclass;
if (options) {
override(sbp, options);
}
}
};

// 定义类型
var define = function(subClassName, options) {
var supClassName = options['extend'] || 'Object';
var supclass = get(supClassName);

var subclass = options['constructor'];
// 创建原型链, 覆盖或扩展原型
extend(subclass, supclass, options);
override(subclass.prototype, {
'$className' : subClassName,
'$class' : subclass,
'$supClassName' : supClassName,
'$superClass' : supclass
});

register(subClassName, subclass);

var pkg = subClassName.indexOf('.') != -1 ? subClassName.split('.').slice(0, -1) : [];
var shortClassName = subClassName.indexOf('.') != -1 ? subClassName.split('.').slice(-1) : subClassName;
var ns = namespace(pkg);
ns[shortClassName] = subclass;
return subclass;
};

// 创建对象
var create = function(className, options) {
var cls = get(className);
var o = new cls();

// 继承父类属性
cls.prototype.$superClass.call(o, options);
// 覆盖或扩展对象
if (options) {
override(o, options);
}

return o;
};

var cache = {
'Object' : Object
};

var register = function(name, value) {
cache[name] = value;
};

var get = function(name) {
return cache[name];
};

var namespace = function(name) {
var namespaces = name.indexOf('.') != -1 ? name.split('.') : name;
var i = 0;
var pNamespace = global;
for(i in namespaces) {
var ns = namespaces[i];
if (pNamespace[ns] === undefined) {
pNamespace[ns] = {};
}
pNamespace = pNamespace[ns];
}
return pNamespace;
};

global.oop = (function() {
return {
define : define,
create : create
};
})();


})(window);





oop.define('wldm.app.Controller', {
constructor: function() {

}
});

oop.define('wldm.app.Application', {
extend : 'wldm.app.Controller',
constructor: function() {

}
});

var controller = oop.create('wldm.app.Controller');
var application = oop.create('wldm.app.Application');

console.log(controller instanceof wldm.app.Controller); // true
console.log(controller instanceof wldm.app.Application); // false
console.log(controller instanceof Object); // true

console.log(application instanceof wldm.app.Controller); // true
console.log(application instanceof wldm.app.Application); // true
console.log(application instanceof Object); // true

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值