有什么方法可以扩展多个基于 Prototype 的 Javascript 构造函数的默认选项吗?
我正在尝试获取事件对象中的选项对象,这可能吗?
var Website = function(options){
this.options = $.extend({}, this.defaults, options);
}
Website.prototype = {
constructor : Website,
defaults: {
navigation: $('#navigation'),
footer : $('#footer')
}
init: function(){
}
};
var Events = function(){
this.init()
}
Events.prototype = {
constructor: Website,
init:function(){
console.log(...)
}
}
最佳答案
这是一个重要的重写,但我建议将默认值存储在两个“类”可以共享的外部变量中:
var App = (function ($) {
var defaults = {
navigation: "nav",
footer : "foot"
};
var Website = function (options) {
this.options = $.extend({}, defaults, options);
this.echo = function (message) {
console.log(message);
};
};
var Events = function (options) {
this.options = $.extend({}, defaults, options);
this.echoTwo = function (message) {
console.log(message + message);
};
};
return {
Website: Website,
Events: Events
};
}(jQuery));
var website = new App.Website({navigation: "changed"});
website.echo(website.options.navigation + ' '+ website.options.footer); // "changed foot"
var events = new App.Events({footer: "bar"}); //
events.echoTwo(events.options.navigation + ' '+ events.options.footer); // "nav barnav bar"
这样,您就可以通过仅在包装自调用函数范围内可用的变量来设置共享选项
。结构和术语有点模糊,但希望总体思路是清晰的。
编辑
我已经重组了一些东西,以允许每个“类”在实例化时设置自己的选项。您也可以执行相同的操作来设置 App
的默认值。
关于Javascript/jQuery 原型(prototype)继承扩展默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17726240/