javascript - 覆盖方法

时间:2011-02-21 07:59:38

标签: javascript

var A = {
   method1 : function(){
      // do some thing
   },

   method2 : function(){
      // do some thing
   }
};

var B = {
  method1 : function(){
   // overriden
  }
};

如何覆盖?

B.extend(B, A);

B.merge(A);

什么是正确的方法?

3 个答案:

答案 0 :(得分:1)

好吧,你扩展了类/对象。

我会看一下jQuery扩展。 http://api.jquery.com/jQuery.extend/

可以轻松地扩展您的类/对象。

示例:

var A = {
    methode1: function(){
        // Do something
    }
    methode2: function(){
        // Do something else
    }
}

var B = {
    methode1: function() {
        // Do something different then A.methode1
    }
}
var object = $.extend(true, A, B);

答案 1 :(得分:1)

一种方法是创建一个具有B所有属性并继承自A的新对象。

E.g。

function extend(B, A) {
    var Constr = function() {
        for(var prop in B) {
            if(B.hasOwnProperty(prop)) {
                this[prop] = B[prop];
            }
        }
    };
    Constr.prototype = A;
    return new Constr(); 
}

然后你可以这样做:

B = extend({
  method1 : function(){
     // overriden
  }
}, A);

A的方法没有改变,你不需要外部库;)

DEMO

答案 2 :(得分:0)

在目前的形式中,我看不出B与对象A有什么关系[所以不存在覆盖的问题]。

如果你真的想要继承继承:

var B = A
B.method1 = function() { 
    // overriding
}

这样,调用B.method2()会获得A's方法,而method1()会被B's版本覆盖。