如何覆盖具有静态功能的函数

时间:2015-03-07 13:58:50

标签: javascript

我在全局范围内有一个函数可以像那样调用那个函数

var b =  blob();

但它也用作具有静态功能的名称空间并具有

var b = blob.parse();

我想覆盖blob()函数而不破坏blob.parse上的函数

3 个答案:

答案 0 :(得分:1)

在您覆盖旧功能后,您需要将其所有属性复制到新功能:

blob = (function (original) {
    // new function body
    function blob() {
        blob.apply(this, arguments);   // "super" call to old function?
        // do whatever you want
    }
    // assuming it's a constructor:
    blob.prototype = original.prototype; // reset prototype
    blob.prototype.constructor = blob; // fix constructor property
    // regardless:
    for (var p in original)
        blob[p] = original[p];
    return blob;
})(blob);

答案 1 :(得分:0)

function blob() {
  return {
    "test": "Yes"
  };
}

blob.prototype.parse = function() {
  return "parse function";
}
var b = blob(),
c = blob.prototype.parse();
console.log(b, c);


var copyprototype = Object.create(blob.prototype);

var blob = function() {
  return {
    "test" : "overridden"
  }
}
blob.prototype = Object.create(copyprototype);

var d = blob(),
e = blob.prototype.parse();
console.log(d, e);

答案 2 :(得分:0)

这是一种尝试构建新对象的方法。这个概念与克隆有关,因此如果您的原始blob对象无论如何都要小心,请小心。

鉴于:

var b = function () { console.log("b"); }
b.parse = function() { console.log("parse"); }

改动是:

var newB = function() { console.log("the new b"); }
for (key in b) {
    newB[key] = b[key];
}

结果:

newB();
>>>> the new b
newB.parse();
>>>> parse