1

有什么方法可以扩展多个基于原型的 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(...)
    }

}
4

1 回答 1

0

这是一个重要的重写,但我建议将默认值存储在两个“类”可以共享的外部变量中:

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"

jsbin

这样,您可以options通过仅在包装、自调用函数的范围内可用的变量来设置共享。结构和命名法有点模糊,但希望总体思路清晰。

编辑

我对事物进行了重组,以允许每个“类”在实例化时设置自己的选项。您也可以这样做来设置默认值App

于 2013-07-18T15:05:24.767 回答