开箱即用,您无法通过良好的 x 浏览器支持轻松做到这一点。
但是,jQuery 确实为您提供了一种让对象相互扩展的方法:http: //api.jquery.com/jQuery.extend/
所以你会这样做:
var extended = $.extend({}, BI, {
init: function () {
console.log('I am init');
}
});
第一个参数(空对象,{}
)意味着BI
(第二个参数)的属性和你传入的对象将被合并到新对象中。
为此,我编写了一个小的多态扩展,$.extend
它允许您从多个对象进行扩展,后一个项目优先:
mergeObjects = function () {
// Convert the arguments Array-like object to an actual array
var args = Array.prototype.slice.call(arguments);
// Only one item? If we give this to $.extend it'll extend jQuery, which is
// not the desired result, so let's spit it back verbatim
if (args.length === 1) {
return args[0];
}
// We need to make sure we're always combining objects starting with a
// completely empty one
args.unshift(true, {});
return jQuery.extend.apply(jQuery, args);
};
因此,您可以使用以下通用属性定义基本模块:
var MyBaseModule.prototype = {
options: {},
getOptions: function () {
return this.options || {};
},
setOptions: function (options) {
this.options = options;
},
log: function () {
// do your logging stuff here
},
error: function () {
// do your error handling stuff here
}
};
和你的实际模块:
var MyModule = function () {
// constructor code here
};
var MyModule.prototype = mergeObjects(MyBaseModule, {
// define your module's methods here
});
...现在 MyModule 已经“继承”了options
属性和选项 getter 和 setter。new MyModule
您可以使用;实例化新模块
如果你想要一种普通的方式,这篇文章可能会有用