SOURCE

console 命令行工具 X clear

                    
>
console
// 情况一:纯粹的函数调用
// 这是函数的最通常用法,属于全局性调用,因此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就是函数运行时所在的环境对象。