this 关键字引用的是包含它的函数作为某个对象的方法被调用时的那个对象——《JavaScript .Dom 高级程序设计》
和变量不同,关键字 this没有作用域的限制,嵌套的函授不会从调用它的函数中继承 this。如果嵌套函数作为方法调用,其this值指向调用他的对象,如果嵌套函数作为函数调用,其this值不是全局对象就是 undefined ——《JavaScript权威指南》
上面是两本比较权威的书,对js的定义。
this 是 js的一个关键字,随着函数的使用 场合不同,this的值也会发生变化的。但是总有一个原则,那就是this只的是调用函数的那个对象
JavaScript有一套完全不同于其他语言的对 this 的处理机制。在五种不同的情况下,this指向各不相同的对象。
全局范围内
this;//在全局范围内使用 this,this会指向全局对象 window
函数调用
形如: foo();//这是 foo函数中的 this对象也会指向全局。 window
方法调用
形如: test.foo();//此时foo函数中的 this对象会指向test对象。
调用构造函数
new foo();//由new创建出的函数,我们称知为构造函数。在函数内容this指向新创建的对象
显示的是指this
当使用 Function.prototype 上的call或者apply方法时,函数内部的this会被显式的设置为函数调用的第一个参数
特殊情况
Foo.method = function(){
function test(){
//this 会被设置为全局对象(就是window对象)
}
}
常见的误解是test中的this将会指向Foo对象,实际上他是指向window全局对象
7. 自己收集的
var shi = {
init:function(){
this.button();
},
button:function(){
console.log(this == shi);//true
console.log(this);//Object
console.log("shi----button")
}
}
一个json对象中的 this 表示他自身这个对象即上例中的 shi 对象。