如何将变量绑定到函数调用

用户3000847

我正在创建一个函数,该函数已经给出了两个参数。我想绑定一个也会被传入的变量。

this.listenTo(this.topView,this.directionChosen.bind('top');
this.listenTo(this.leftView,this.directionChosen.bind('left');
this.listenTo(this.rightView,this.directionChosen.bind('right');
this.listenTo(this.bottomView,this.directionChosen.bind('bottom');

directionChosen:function(item,move,direction) {

}

是否可以绑定变量/属性并将其作为函数的方向传递?

我一直在这样做,但可能做得不好。谢谢

jfriend00

如果您查看的文档.bind(),则可以看到它带有一个或多个参数。第一个参数是this要为函数调用设置指针。您必须将其作为第一个参数传递。之后的其他参数是可选的,并且将是传递给实际函数的第一个参数。

进一步(我不太清楚您要问的是什么),您必须传递要传递的实际参数,而不是变量名。

因此,您的操作方式将行不通。您必须将所需的this值作为第一个参数传递,并且您传递的所有其他参数将首先发送到函数,而不是最后发送给函数。


您可以使用闭包来解决您的问题,本质上是一样的.bind(),但是在您自己的自定义闭包中,您可以使用函数参数做任何您想做的事情。

// method to call
directionChosen: function(item,move,direction) {

}

// code to call our method with custom arguments
var self = this;
this.listenTo(this.mainView, function(item, move) {
    self.directionChosen(item, move, 'top');
});

或者,如果top实际上是一个变量名,并且您希望将该变量的值作为参数传递(从您的问题中不清楚,您想要的是什么),它将看起来像这样:

// code to call our method with custom arguments
var self = this;
this.listenTo(this.mainView, function(item, move) {
    self.directionChosen(item, move, top);
});

如果要大量使用此后挂起的参数行为,则可以创建自己的自定义版本.bind()来为您执行此操作。

Function.prototype.bindAfter = function(thisPtr /* one or more args */) {
    var args = Array.prototype.slice.call(arguments);
    var self = this;
    args.shift();
    return function() {
        var newArgs = Array.prototype.slice.call(arguments).concat(args);
        return self.apply(thisPtr, newArgs);
    }
};

然后可以这样使用.bindAfter()

this.listenTo(this.topView,this.directionChosen.bindAfter(this, 'top'));
this.listenTo(this.leftView,this.directionChosen.bindAfter(this, 'left'));
this.listenTo(this.rightView,this.directionChosen.bindAfter(this, 'right'));
this.listenTo(this.bottomView,this.directionChosen.bindAfter(this, 'bottom'));

仅供参考,解决此问题的暴力方式如下:

var self = this;
this.listenTo(this.topView, function(item, move) {
    return self.directionChosen(item, move, 'top');
});
this.listenTo(this.leftView, function(item, move) {
    return self.directionChosen(item, move, 'left');
});
this.listenTo(this.rightView, function(item, move) {
    return self.directionChosen(item, move, 'right');
});
this.listenTo(this.bottomView, function(item, move) {
    return self.directionChosen(item, move, 'bottom');
});

实际上创建的新代码更少.bindAfter()


您还可以创建一个针对此问题的辅助函数:

function callWithDirection(thisPtr, direction) {
    return function(item, move) {
        return thisPtr.directionChosen(item, move, direction)
    }
}

然后,您可以像这样使用它:

this.listenTo(this.topView, callWithDirection(this, 'top'));
this.listenTo(this.leftView, callWithDirection(this, 'left'));
this.listenTo(this.rightView, callWithDirection(this, 'right'));
this.listenTo(this.bottomView, callWithDirection(this, 'bottom'));

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将 `$this` 绑定到 PHP 函数?

来自分类Dev

如何将函数绑定到对象?

来自分类Dev

如何将ng-click绑定到自定义指令并调用父函数?

来自分类Dev

如何将函数变量绑定到 Clojure 中的当前执行范围?

来自分类Dev

如何将变量动态绑定到INPUT

来自分类Dev

如何将RACSignal重新绑定到BOOL变量?

来自分类Dev

如何将滑块绑定到Javascript中的变量?

来自分类Dev

如何将变量绑定到被包含的部分

来自分类Dev

如何将ts变量绑定到html?

来自分类Dev

如何将RACSignal重新绑定到BOOL变量?

来自分类Dev

如何将变量绑定到被包含的部分

来自分类Dev

如何将滑块绑定到Javascript中的变量?

来自分类Dev

如何将C#变量绑定到HTML

来自分类Dev

如何将参数绑定到C函数指针?

来自分类Dev

如何将Javascript函数绑定到动态加载的HTML

来自分类Dev

如何将参数对象绑定到JavaScript中的函数?

来自分类Dev

如何将函数的“ this”绑定到类(React Component)

来自分类Dev

如何将多个onclick函数绑定到特定节点?

来自分类Dev

如何将int绑定到字典中的函数?

来自分类Dev

如何将函数绑定到对象属性?

来自分类Dev

如何将值关联到函数调用?

来自分类Dev

如何将值关联到函数调用?

来自分类Dev

如何将system()函数的输出重定向到变量?

来自分类Dev

如何将多个变量从函数传递到jquery attr

来自分类Dev

NodeJs如何将变量传递到导出函数

来自分类Dev

如何将变量从Kendo网格传递到模板函数

来自分类Dev

如何将变量“注入”到匿名函数中

来自分类Dev

如何将多个变量从函数传递到jquery attr

来自分类Dev

如何将函数的结果存储到变量中?

Related 相关文章

热门标签

归档