obj = {
go: function() { alert(this) }
}
obj.go(); // object
(obj.go)(); // object
(a = obj.go)(); // window
(0 || obj.go)(); // window
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释为什么后两个打印窗口对象和前两个打印引用.
当您直接执行方法时,就像最后两个表单一样,this指针不会设置为对象.当不处于严格模式时,它被设置为window(在严格模式下,它将被设置为undefined,这有助于您捕获错误).该this指针将根据您如何调用javascript中设置的东西.
始终确保this指针相应设置的最简单方法是始终在对象的上下文中调用方法,如:
obj.go();
Run Code Online (Sandbox Code Playgroud)
这里有些例子:
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()
Run Code Online (Sandbox Code Playgroud)
你应该记住的是,这obj.go只是javascript中最初存储为属性的函数obj.但是,一旦你获得了属性值,它就只是一个函数指针,不再与任何特定对象有任何明确的关联.如果希望this在方法中适当地设置指针,则必须给它一个对象,如何调用它.这与其他一些语言不同,并且与JS中的许多不同的东西不同,它既可以是您可以利用的功能,也可能是偶尔令人困惑的学习.
| 归档时间: |
|
| 查看次数: |
71 次 |
| 最近记录: |