javascript中的引用类型

javascript中的引用类型,javascript,Javascript,谁能解释一下为什么后两个打印窗口对象,前两个打印引用 当您直接执行一个方法时,就像前两个表单一样,此指针不会设置为对象。当不处于严格模式时,它被设置为窗口(在严格模式下,它将被设置为未定义,这有助于捕获错误)。这个指针是根据javascript中调用内容的方式设置的 始终确保相应设置此指针的最简单方法是始终在以下对象的上下文中调用该方法: obj = { go: function() { alert(this) } } obj.go(); // object (obj.go)(); //

谁能解释一下为什么后两个打印窗口对象,前两个打印引用

当您直接执行一个方法时,就像前两个表单一样,
指针不会设置为对象。当不处于严格模式时,它被设置为
窗口
(在严格模式下,它将被设置为未定义,这有助于捕获错误)。
这个
指针是根据javascript中调用内容的方式设置的

始终确保相应设置
指针的最简单方法是始终在以下对象的上下文中调用该方法:

obj = {
  go: function() { alert(this) }
}

obj.go(); // object

(obj.go)(); // object

(a = obj.go)(); // window

(0 || obj.go)(); // window
以下是一些例子:

obj.go();

您应该记住的是,
obj.go
只是javascript中的一个函数,最初作为属性存储在
obj
上。但是,一旦您获得该属性值,它就只是一个函数指针,不再与任何特定对象有任何显式关联。如果希望在方法内部适当设置
this
指针,则必须以调用方式将其与对象关联起来。这与其他一些语言不同,就像JS中许多不同的东西一样,它既可以是您可以利用的功能,也可以偶尔让您感到困惑。

。。。最后一个问题。。。你能简单地给我解释一下对象上下文部分吗。。。“没弄清楚。”凯文。我的最后一段没有解释吗?一旦你完成了
a=obj.go
a
只是一个函数指针。它不与任何对象关联。调用
a()
时,javascript引擎没有对象可与之关联,因此它不知道如何处理
指针。为了使方法与对象相关联,您必须在调用方法时应用这种关联,使用我所展示的一个示例。
obj.method()    // this in method automatically set to obj

var a = obj.method();
a();            // this set to window as no object context is provided

var a = obj.method();
a.call(obj)     // this explicitly set to obj by .call()
a.apply(obj)    // this explicitly set to obj by .apply()