如何正确的了解this对象
—— this对象是在运行时基于函数的执行环境绑定的,在全局函数中,this 等于window,而当函数作为某个对象的方法调用时,this等于那个队象,不过,匿名函数的执行环境具有全局性,因此其this对象通常指向window.请看下边例子
var name = ' this Window ';//创建全局变量
// 创建一个包含name属性的对象
var object = {
name: " My Object ",
// 返回一个匿名函数
getNameFunction: function () {
return function () {
return this.name;
}
}
}
// 立即调用返回的函数
alert(object.getNameFunction()());//"this window"(在非严格模式下);
——每个函数在调用时都会自动取得两个特殊变量:this 和 arguments。内部函数在搜索这两个变量时,直到搜索到其活动对象为止;因此其永远不能直接访问外部函数中的两个变量,但是,把外部作用域中的this对象保存在一个闭包能够访问到变量里,就可以让闭包访问该对象了;
var name = ' this Window ';//创建全局变量
// 创建一个包含name属性的对象
var object = {
name: " My Object ",
// 返回一个匿名函数
getNameFunction: function () {
return function () {
var that = this;//将this对象赋值给了that;
return this.name;
}
}
}
// 立即调用返回的函数
alert(object.getNameFunction()());//" My Object""
在几种特殊的情况下,this的值可能会发生改变。比如下边例子:
var name = ' this Window ';//创建全局变量
// 创建一个包含name属性的对象
var object = {
name: " My Object ",
// 返回一个匿名函数
getName: function () {
return this.name;
}
}
这里的getName()方法只是简单的返回了this.name的值,下面就是调用object.getName()的方式及结果:
object.getName(); // "My Object"
(object.getName)(); // "My Object"