我在全局范围内有一个函数可以像那样调用那个函数
var b = blob();
但它也用作具有静态功能的名称空间并具有
var b = blob.parse();
我想覆盖blob()函数而不破坏blob.parse上的函数
答案 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