// 情况一:纯粹的函数调用
// 这是函数的最通常用法,属于全局性调用,因此this就代表全局对象
// var x = 1
// function test() {
// console.log(this)
// console.log(this.x)
// }
// test() // [object Window] 1
// 情况二:作为对象方法的调用
// this就指这个上级对象
// function test() {
// console.log(this)
// console.log(this.x)
// }
// var obj = {}
// obj.x = 1
// obj.m = test
// obj.m() // [object Object] 1
// 情况三 作为构造函数调用
// 所谓构造函数,就是通过这个函数,可以生成一个新对象。这时,this就指这个新对象
// function test() {
// console.log(this)
// this.x = 1
// }
// var obj = new test()
// console.log(obj.x) // [object Object] 1
// 情况四 apply 调用
// apply()是函数的一个方法,作用是改变函数的调用对象。它的第一个参数就表示改变后的调用这个函数的对象。因此,这时this指的就是这第一个参数。
var x = 0
function test() {
console.log(this)
console.log(this.x)
}
var obj = {}
obj.x = 1
obj.m = test
obj.m.apply() // [object Window] 0
obj.m.apply(obj) // [object Object] 1
// 注意:apply()的参数为空时,默认调用全局对象。因此,这时的运行结果为0,证明this指的是全局对象。
this是 JavaScript 语言的一个关键字
它是函数运行时,在函数体内部自动生成的一个对象,只能在函数体内部使用。
函数的不同使用场合,this有不同的值。总的来说,this就是函数运行时所在的环境对象。