我经常需要将对象的方法传递给其他对象。但是我通常希望将方法附加到原始对象(通过附加我的意思是'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) })
我想知道是否有更简单的方法来传递附加到原始对象的方法。
答案 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'});