2012-06-06 2 views
2

Я пытаюсь расширить объект, и я хочу изменить метод первого, а не переопределять его. Я не думаю, что это понятно, так вот пример:JQuery: расширение объекта для изменения метода

var object1 = { 
    whatever : function(){ 
     console.log('first object method'); 
    } 
} 

var object2 = { 
    whatever : function(){ 
     console.log('second object method'); 
    } 
} 

var object = $.extend(true, object1, object2); 

object.whatever(); 

Этот пример выведет second object method, но то, что я хочу, что это Ouput first object method и second object method.

Есть ли способ сделать это?

+0

Это то, что пример показывает: когда вы определяете два метода с тем же именем в два объекта, первый не запускается. Я хочу что-то вроде 'parent :: whatever()' в PHP – romainberger

+0

Нет, 'extends' не расширяет функции, это не то, что было предназначено для выполнения. – gdoron

+0

'$ .extend' не работает. Он просто заменяет свойства, когда есть дубликаты. –

ответ

3

Javascript использует прототипичного наследование, так что вы можете сделать object2 наследовать свойства и методы Object1 пути делать

object2.prototype=object1; 

это означает, что object2 наследует все свойства и методу object1 и любые перезаписываемые методы могут быть доступный по адресу object2.prototype.method()

так parent::whatever(); эквивалентен this.prototype.whatever(); при вызове из сферы действия объекта2.


var object1 = { 
    whatever : function(){ 
     console.log('first object method'); 
    } 
} 

var object2 = { 
    whatever : function(){ 
     console.log('second object method'); 
     this.prototype.whatever(); // Equivalent to parent::whatever(); 
    } 
} 

object2.prototype=object1; // Makes object2 inherit object1's properties and methods 

object2.whatever(); // "second object method" "first object method" 
+0

Где я должен добавить 'object2.prototype = object1;'? Во втором объекте или после? – romainberger

+0

Я обновил свой ответ на примере кода – ddlshack

+0

Не так просто, как хотелось бы, потому что в приложении я работаю над первым объектом, который будет расширен несколько раз, но он работает, спасибо! – romainberger

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