var object = {}; //lots of stuff in here
var func = object.dosome;
object.dosome = function(a,b) {
func(a,b);
//someth else here i need to add
}
这很有效但很难看
那么有没有办法补充object.dosome方法,而不创建一个包含它的新函数的函数?
某种parent.dosome?
答案 0 :(得分:0)
可能创建一个类Object并在其原型中定义dosome()方法。
var Object = new function() {}; //lots of stuff in here
Object.prototype.dosome = function(a,b) {
func(a,b);
}
//and then
var myObject = new Object();
答案 1 :(得分:0)
我认为您应该阅读一些关于JS OOP的内容。 ES6添加了一些很好的语法糖,可以帮助您在更少的代码行中实现您想要的功能。阅读更多here。
但是,如果您不希望原型链出现问题,可以采用更简单的方法来实现您的目标:
function chain (baseFunc, func) {
return function () {
var args = [].slice.call(arguments, 0);
args.unshift(baseFunc);
return func.apply(this, args);
};
}
用法:
var obj = {
doSome: function (a, b) { return a + b; }
};
obj.doSome(4, 5); // 9
obj.doSome = chain(obj.doSome, function (baseFunc, a, b) {
var result = baseFunc(a, b);
return result + 10;
});
obj.doSome(4, 5); // 19
你可以更进一步,摆脱任务:
function extend (instance, method, func) {
instance[method] = chain(instance[method], func);
}
extend(obj, "doSome", function (baseFunc, a, b) {
var result = baseFunc(a, b);
return result + 2;
});
obj.doSome(4, 5); // 21