我很好奇我将某些东西绑定到承诺的时间。
var that = this;
function p(){
var promise = new Promise(
function (yes, no) {
/* .... */
/* .... */
}).then(function (val) {
/* .... */
/* .... */
}.bind(this));
}.bind(this)
条件
that === this
总是返回true,考虑到promise之外的范围是异步的,.then
可能会在生命周期的后期解决。
换句话说,this
是否具有与调用第一个函数时相同的值,或者它是否具有.then
部分实际使用的值?
答案 0 :(得分:3)
this
的值由调用方法中点的左侧确定。如果您没有调用对象的方法,那么this
将成为全局(浏览器中的窗口)。
在您的示例中,行var that = this
将该值设置为该全局变量窗口(或全局)。所以在这个特定情况下,这总是等于那个。然而,这是由于副作用,如果您使用另一个对象this
,那么在
function (yes, no) {
/* .... */
/* .... */
}
this !== that
我做了一个小小的小提琴作为例子 http://jsfiddle.net/metaf0x9/
答案 1 :(得分:1)
then
函数内部that === this
。这是因为bind
函数。
在promise函数内部,无法确定this
的值是多少,但不为that
。
原因是我们不知道调用函数的上下文。此函数未绑定到that
,因此我们知道它不是this
对象。 this
对象可以是全局的,也可以通过bind
或call
调用绑定到其他对象。在这种情况下,this
会有所不同。