1

有人知道吗?之前找不到这个问题,尽管它看起来很基本。

4

2 回答 2

3

(关键字)它不是完全隐式context的,可以显式设置和更改。this

例如:

function test () {
  alert(this);
}

test.call("Hello world");

使用字符串作为上下文调用该test函数。

this所以总而言之,除非你明确定义它,或者你在函数内部,否则你无法知道它是什么。

于 2009-11-14T19:27:11.973 回答
2

同一个函数会看到不同的值,this具体取决于它的调用方式。有关详细信息,请参阅Crockford,但有四种情况:

  1. 作为一个简单的函数调用,它绑定到全局/窗口对象。
  2. 作为对象上的方法调用,它引用该对象。
  3. 通过关键字作为构造函数调用new,它是新实例化的对象,它继承自存储在函数自身prototype属性中的对象。
  4. 由它自己的applycall方法调用,它是提供的第一个参数。

如果这些情况听起来很复杂、乏味且容易出错,那么更有理由避免依赖this外部方法,无论如何它最有意义。

于 2009-11-14T21:01:41.050 回答