2013-07-18 5 views
1

есть ли способ расширить опции по умолчанию для нескольких функций конструктора Javascript на основе Prototype?Javascript/jQuery Наследование прототипа расширяется по умолчанию

Я пытаюсь получить объект options в объекте 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(...) 
    } 

} 
+0

Я не вижу никакого наследования между «Событиями» и «Веб-сайтом» здесь? Вам просто нужно «Event.prototype.defaults = Website.prototype.defaults»? – Bergi

+0

Я хотел бы знать, как я могу получить свойства или объект по умолчанию с веб-сайта и использовать их внутри объекта Events, это возможно? –

+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

В основном, я пытаюсь понять это: Как иметь несколько объектов, написанных с функциями конструктора и свойствами доступа, и вызывать методы внутри другого объекта. Я пытаюсь сделать отдельные объекты для лучшей организации кода. Вот мой пример: [ссылка] (http://jsbin.com/ocezep/1/edit) –

Смежные вопросы