Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript重写方法_Javascript - Fatal编程技术网

javascript重写方法

javascript重写方法,javascript,Javascript,如何覆盖 var A = { method1 : function(){ // do some thing }, method2 : function(){ // do some thing } }; var B = { method1 : function(){ // overriden } }; 或 什么是正确的方法?在它目前的形式中,我看不出B与对象A有任何关系[因此不存在重写的问题] 如果你真的想继承一些东西: B.me

如何覆盖

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

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

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


什么是正确的方法?

在它目前的形式中,我看不出
B
与对象
A
有任何关系[因此不存在重写的问题]

如果你真的想继承一些东西:

B.merge(A);

因此,调用
B.method2()
会得到
A的
方法,而
method1()
会被
B的
版本覆盖。

好吧,您可以扩展类/对象

我将看一看jQuery扩展。

可以轻松地使用它来扩展类/对象

例如:

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

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

例如

然后你可以做:

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(); 
}
A
的方法不变,您不需要外部库;)


谢谢你的建议,如果按照你的方式,我总是会包括一个,但我不想要。试着想象一下,如果有50个函数需要重写,会发生什么情况:(.我想把它们放在一个object中,但是我有一个问题。使a.method1等于B.method1。对不起,我来自java背景,在那里扩展类而不是对象;)。但它用于扩展javascript中的“对象”。
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);
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);