如何从外部补充对象功能

时间:2015-10-07 14:02:05

标签: javascript function object

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?

2 个答案:

答案 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