2012-06-06 27 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,但我想的是,它输出中first object methodsecond object method

有没有办法做到这一点?

+0

这是什么例子显示:当你定义两个方法在两个对象相同的名称,第一个不会被触发。我想在PHP – romainberger

+0

中使用像'parent :: whatever()'的东西不,“extends”不会“扩展”函数,这不是它设计的目的。 – gdoron

+0

'$ .extend'不能这样工作。它只是在重复时替换属性。 –

回答

3

JavaScript使用原型继承,这样就可以使做对象2继承object1的属性和方法

object2.prototype=object1; 

这意味着对象2将会继承所有属性和object1方法,任何覆盖方法可访问在object2.prototype.method()

因此parent::whatever();相当于this.prototype.whatever();从object2范围调用时。


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