Javascript / jQuery Prototype继承扩展默认值

时间:2013-07-18 14:25:06

标签: javascript jquery prototype

有什么方法可以扩展多个基于Prototype的Javascript构造函数的默认选项吗?

我正在尝试在Events对象中获取选项对象,是否可能?

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(...)
    }

}

1 个答案:

答案 0 :(得分: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的默认值。