“this.foo”总是与“foo.bind(this)”相同吗?

Is `this.foo` always the same as `foo.bind(this)`?

本文关键字:foo this bind      更新时间:2023-09-26

只是想知道这两者是否总是相同的,如果不是,在什么上下文中?我想我理解"绑定"和"这个",我只是想确定一下。

我试图理解的上下文,超越"绑定"和"这个",

我有一个对象..

var Foo = Class.create({
  a: func.bind(this),
  b: func
});

ab this是一样的吗?两者有什么区别。如果b得到这个,则在Foo.b上下文中的被调用方Foo被调用方。在a的情况下,我们明确表示this是我们安装方法时的对象 a .

它并不总是相同的。

例:

'use strict';
function bar() {
    // here is your code
}
bar();

这是this.foofoo.bind(this)不同的时候,因为使用'use strict';this undefinedbar中。

更新问题:

A和B是一样的吗?两者有什么区别。如果 b 得到这个,则在 Foo.b 上下文中的被调用方是 Foo。在 a 的情况下,我们明确表示这是我们安装方法 a 时的对象。

它们是对 2 个不同对象的引用。调用的行为取决于您如何准确调用它们。如果没有调用它们的代码,就不可能说它们的行为方式是相似还是不同。

var Foo = Object.create({
  a: func.bind(this),
  b: func
});
Foo.a();
Foo.b();

使用此代码,它们的行为将有所不同:

  1. thisfunc内部,以防a等于func.bind(this)调用范围内的this
  2. thisfunc内,以防b等于Foo

JSFiddle: http://jsfiddle.net/tsuddg1o/

另一个更新

对象构造代码等于:

var tmp = func.bind(this);
var Foo = Object.create({
  a: tmp,
  b: func
});