看了b站coderwhy老师的JavaScript高级 《this绑定规则》,做一些学习笔记
https://lanan.blog.csdn.net/article/details/125174357
函数在调用时,JavaScript会默认给this绑定一个值;
this的绑定和定义的位置(编写的位置)没有关系;
this的绑定和调用方式以及调用的位置有关系;
this是在运行时被绑定的;
- 默认绑定规则:
全局中或函数独立调用中都默认指向window(非严格),undefined(严格)
// 案例一:
function foo() {
console.log(this); // window
}
foo();
// 案例二:
function test1() {
console.log(this); // window
test2();
}
function test2() {
console.log(this); // window
}
test1();
- 隐式绑定规则:
通过某个对象发起的函数调用, 并且this指向这个发起调用的对象。谁调用就指向谁
// 案例二
function foo() {
console.log(this); // obj1
}
var obj1 = {
name: "obj1",
foo: foo,
};
var obj2 = {
name: "obj2",
obj1: obj1,
};
obj2.obj1.foo();
- new绑定
new一个函数:
1.创建新的空对象
2.将this指向这个空对象
3.执行函数体中的代码
4.如果函数没有返回其他对象时,默认返回这个新对象
- 显式绑定规则
call,apply(数组,传参数给函数),bind(创建一个新的绑定函数)
优先级:new,bindcallapply,隐式,默认