如何在javascript中传递方法?

时间:2010-06-06 10:50:36

标签: javascript functional-programming oop

我经常需要将对象的方法传递给其他对象。但是我通常希望将方法附加到原始对象(通过附加我的意思是'this'应该引用原始对象)。我知道几种方法:

a)在对象构造函数中:ObjectA = function() { var that = this; var method = function(a,b,c) { that.abc = a+b+c }}

b)在objectA中传递了objectB:objectB.assign(function(a,b,c) { that.method(a,b,c) })

c)在两个对象之外:objectB.assign(function(a,b,c) { objectA.method(a,b,c) })

我想知道是否有更简单的方法来传递附加到原始对象的方法。

3 个答案:

答案 0 :(得分:4)

您可以为所有功能定义“createDelegate”方法:

Function.prototype.createDelegate = function(scope) {
    var method = this;
    return function() {
        return method.apply(scope, arguments);
    }
}

然后使用:

var myDelegate = myFunction.createDelegate(myScope);

调用“myDelegate”将执行“myFunction”,其中“this”指向“myScope”,并且传递给myDelegate的参数相同

答案 1 :(得分:0)

只要您使用相应的所有者对象调用其他方法,将始终引用正确的所有者。

答案 2 :(得分:0)

您可以根据需要进行委派,或只是调用缺少定义方法范围的方法的对象

instance.method.call(Other-Object/*,argument,...*/)

例如,如果Array有一个过滤方法,您可以将其称为节点列表对象的方法。

var list=document.getElementsByTagName('p'), a=[], 

list= a.filter.call(list,function(itm){return itm.className=='sidebar'});