`bind(this)` 是什么意思?

14
在一个 SAPUI5 应用程序的控制器的 onInit 函数中的某些部分有一个自动生成的代码,像这样:
    this.getView().addEventDelegate({
            onBeforeFirstShow: function() {
                // Some codes
            }.bind(this)
        });

现在我的问题是,.bind(this) 是什么意思?它是做什么用的?它是纯 JavaScript 代码还是与 SAPUI5 有关?


3
@Mahdi,下次在提问之前请先搜索一下。 - Cerbrus
1
对于UI5开发人员来说,重要的是要注意bind返回一个新函数。这使得分离处理程序(例如在onExit | exit中)更加困难。您的IDE不应建议使用bind。相反,如果可能,请将侦听器对象作为参数传递。请参见https://stackoverflow.com/a/61603539/5846045或https://stackoverflow.com/a/61686925/5846045。 - Boghyon Hoffmann
3个回答

11

它将函数的监听器绑定到当前类,然后当您在 onBeforeFirstShow 函数内使用 this 指针时,this 指针指向封装的类,并且您可以访问其成员。


这是因为使用了bind(this)。这允许添加新的参数。请在此处查看解释:https://dev59.com/iXE95IYBdhLWcg3wm_It#10115970 - Ricardo Magalhães

11

是的,这是纯JavaScript代码,您可以在这里了解更多bind的相关信息。

bind()方法创建一个新函数,调用该函数时,它的this关键字设置为提供的值,并在调用新函数时提供的任何参数之前给出给定序列的参数。

在这种情况下,它的基本作用是将当前的this绑定到该函数,因此当调用onBeforeFirstShow时,该函数内部的this将是传递给bind函数的this

您还可以查看ES6中的新箭头函数语法,它自动绑定当前的this,因此不需要使用bind(this)


所以基本上这是一个额外的步骤,告诉JS代码应该在哪里设置函数上下文,对吗?那么如果没有代码绑定当前的'this'上下文会发生什么? - Harvey Lin

1

bind()方法创建一个新函数,当调用时,其this关键字设置为提供的值,并在调用新函数时提供的任何参数之前给定一个序列。

语法

fun.bind(thisArg[, arg1[, arg2[, ...]]])

参考Mozilla Developer Network


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接