`this.foo`总是和`foo.bind(this)`相同吗?

时间:2015-03-13 03:48:56

标签: javascript this bind

只是想知道这两个是否总是相同,如果不是在什么情况下?我想我理解'bind'和'this',我只想确定。

我正在努力理解的内容,超越'bind'和'this',

我有一个对象..

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

ab的{​​{1}}是否相同?这两者有什么不同。如果this得到了这个,b上下文中被叫方的被叫方为Foo.b。在Foo的情况下,我们明确指出a是我们安装方法this时的对象。

1 个答案:

答案 0 :(得分:1)

并不总是一样。

示例:

'use strict';

function bar() {
    // here is your code
}

bar();

以下是this.foofoo.bind(this)不同的情况,因为this在使用undefinedbar'use strict';

更新后的问题

更新

  

和a和b是一样的吗?这两者有什么不同。如果b得到了这个,那么被调用者在Foo.b的上下文中就是Foo。在我们明确说明这是我们安装方法a。

时的对象的情况下

它们是对2个不同对象的引用。调用的行为取决于你如何称呼它们。如果没有调用它们的代码,就无法确定它们是否以相似或不同的方式运行。

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

Foo.a();
Foo.b();

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

    如果this func中的{li> athis来电范围内的func.bind(this)相等 如果this func中{li> b等于Foo

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

    另一次更新

    您的对象构造代码等于:

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