1

複数のプロトタイプ ベースの Javascript コンストラクタ関数のデフォルト オプションを拡張する方法はありますか?

Events オブジェクトで options オブジェクトを取得しようとしていますが、可能ですか?

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 に答える