function foo() { console.log(this.bar); } var bar = "global"; var obj1 = { bar: "obj1", foo: foo }; var obj2 = { bar: "obj2" }; foo(); // global foo.call(obj1); // obj1 foo.call(obj2); // obj2
这个代码片段定义了一个函数foo
,和三个对象:全局对象、obj1
和obj2
。其中obj1
和obj2
都有一个名为bar
的属性,分别被赋为"obj1"
和"obj2"
。
首先调用foo
时,没有指定上下文,所以this
指向全局对象,即变量bar
的值为"global"
,所以输出global
。
然后使用call
方法,并将obj1
作为参数传入,可以强制将this
指向obj1
,所以this.bar
为obj1.bar
,即输出obj1
。
最后使用call
方法,并将obj2
作为参数传入,同样可以强制将this
指向obj2
,所以this.bar
为obj2.bar
,即输出obj2
。