2013-07-18 64 views
1

有什麼辦法如何擴展基於多個Prototype的Javascript構造函數的默認選項?Javascript/jQuery原型繼承擴展默認值

我試圖讓事件對象中的選項對象,這有可能嗎?

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

} 
+0

我在這裏看不到'Events'和'Website'之間的任何繼承關係嗎?你只是想'Event.prototype.defaults = Website.prototype.defaults'? – Bergi

+0

我想知道,如何從網站獲取屬性或默認對象並在事件對象中使用它們,這可能嗎? –

+0

是的,只需訪問'Website.prototype.defaults'! – Bergi

回答

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的默認值。

+0

基本上我想弄明白的是:如何使用構造函數和訪問屬性編寫多個對象,並調用另一個對象內的方法。我試圖讓單獨的對象更好地組織代碼。 這裏是我的例子:[link](http://jsbin.com/ocezep/1/edit) –