-
js中this的指向(this指向都与调用时候上下文有关,和声明上下环境无关)
显示绑定
就是强制把this绑定在某个对象上
基本上就是apply和call方法,他两个区别就是第一个参数都是上下文的context,第二个参数apply是一个数组形式,call的第二个参数是依次排列的
var cat = {
food: 'fish',
eat: function (a,b,c) {
console.log(this.food);
console.log(a,b,c);
}
}
var dog = {
food: 'meat',
eat: function (a,b,c) {
console.log(this.food);
console.log(a,b,c);
}
}
//猫想吃肉了。
cat.eat.apply(dog,[1,2,3])
//meat
//1,2,3
cat.eat.call(dog,1,2,3)
//meat
//1,2,3
在调用 cat.eat 的时候将this强制绑定到了dog上
隐式绑定
function foo(){
console.log(this.a)
}
var obj={
a:2,
foo:foo
}
obj.foo()//2
foo被obj调用,this,就指向了obj
new绑定
```
function test(){
this.x = 1;
}
var o = new test();
alert(o.x); //1
this 指代new 出的对象
```
默认绑定
var a = 2;
function test(){
console.log(this.a);
}
test();//2
这里的this指向window
箭头函数绑定
不会改变this的指向,也就是指向外层调用者obj
- 原型链概念解析
原型链解析过程
通过某个对象寻找某个属性,在对象上寻找不到的话,会想__proto__原型属性继续查找,直接找到null位为止,这样通过原型查找形成一条链式结构就叫做原型链