this指向什么
以下是提取的文字内容,保留原文格式并转换为无序列表:
-
我们先说一个最简单的,this在全局作用于下指向什么?
-
这个问题非常容易回答,在浏览器中测试就是指向window
console.log(this); // window
var name = "why";
console.log(this.name); // why
console.log(window.name); // why
-
但是,开发中很少直接在全局作用域下去使用this,通常都是在函数中使用。
-
所有的函数在被调用时,都会创建一个执行上下文:
-
这个上下文中记录着函数的调用栈、AO对象等;
-
this也是其中的一条记录;
this不同的执行方式有不同的结果
function foo() {
console.log(this)
}
// 1. 直接调用这个函数
foo() // 在浏览器中输出:window(非严格模式)或 undefined(严格模式)
// 2. 创建一个对象,对象中的函数指向foo
var obj = {
name: 'why',
foo: foo
}
obj.foo() // 输出:obj 对象 {name: 'why', foo: ƒ}
// 3. apply调用
foo.apply("abc") // 输出:String {'abc'} 包装对象
打印结果:
结论: this指向什么,和函数所处的位置没有关系,跟函数被调用的方式是有关系的
这个的案例可以给我们什么样的启示呢?
-
- 函数在调用时,JavaScript会默认给this绑定一个值;
-
- this的绑定和定义的位置(编写的位置)没有关系;
-
- this的绑定和调用方式以及调用的位置有关系;
-
- this是在运行时被绑定的;
this的绑定规则:
- 绑定一:默认绑定
- 绑定二:隐式绑定
- 绑定三:显示绑定
- 绑定四:new绑定