如何为现有的对象方法注入额外的功能?

时间:2016-07-13 06:38:41

标签: javascript object

假设我有一个obj,

var obj = {
     l:function(){
            alert(1);
     }
}

如何在不编辑obj的情况下向obj.l添加更多功能?

1 个答案:

答案 0 :(得分:3)

  

没有编辑obj?

如果您的意思是不修改对象,则不能。如果您的意思是不编辑对象的源代码,您可以在开头和/或结尾添加功能,但不能在中间添加功能。

(function() {
    var original = obj.l;
    obj.l = function() {
       var retval;

       // You can do something here

       // Call the original
       retVal = original.apply(this, arguments);

       // You can do something here

       // Return result
       return retVal;
    };
})();

这里的作用域功能只是为了避免使original可用于任何其他代码。

调用原始文件的示例将使用相同的this和调用包装器的参数列表来调用它。当然,您可以通过Function#call代替Function#apply来传递不同的参数。