创建一个构造函数的时候,需要使用new操作符,函数执行结束后,函数体的this就指向该实例。 在JavaScript中,this的指向是随着宿主环境的变化而变化的,在不同的地方调用,返回的可能不是同一个结果。 在JavaScript中,this指向的永远是函数的调用者。
标题this指向全局对象
当函数没有所属对象而直接调用时,this指向全局对象,如以下代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
var value = 10;
var obj = {
value: 1000,
method: function () {
var foo = function () {
console.log(this.value);
console.log(this)
}
foo();
return this.value;
}
}
obj.method()
</script>
</body>
</html>
在浏览器运行后,第一个console.log()输出10,第二个console.log打印window,就是当前this的指向;
标题this指向所属对象
第三个this是指向obj的,因为method的调用者是obj。
标题this指向对象实例
通过new操作符调用构造函数生成对象的实例,this指向该实例
标题this指向call()函数、apply()函数、bind()函数调用后重新绑定的对象
call()、apply()、bind()函数可以改变函数执行主体。 如果函数中有this关键字,那么它就指向函数的执行主体。 闭包中的this 函数的this变量只能被自身访问,它的内部函数不能访问, 所以闭包内部的this关键字不能访问到外部函数的this变量。
|