this的指向
this的指向
对于一些刚刚学习js的小萌新来说,看到this绝对会是比较头疼的事情,因为不知道他到底指向谁,从而看不懂别人写的代码,希望我的这篇博客会对大家有所帮助,同时也整理一下自己理解的思路,如果有任何不对的地方,欢迎反馈.
this有四大环境(调用模式)下的指向,在我们判断this的到底代替谁之前,必须确定当前this的环境,this就像一个变色龙,根据环境不同指向也不同
- 函数调用
function fn(){ console.log(this); //打印看一下this,发现this指向window } fn(); //可以理解为window.fn();
2.构造函数调用模式
function Person(name,age){
this.name = name,
this.age = age,
this.say = function(){
console.log(this);
}
}
var p = new Person("二狗",20);
p.say(); //打印出来的是p这个实例对象
var q = new Person("狗蛋",21);
q.say(); //打印出来的事q这个实例对象
3.对象调用模式
其实构造函数里的this.name等一些的this也是指向实例对象
var obj = { name : "zs", age : 18, say : function(){ console.log(this); //指向obj } } obj.say(); //因为是obj这个对象去掉用的say方法 var arr = [obj,function(){console.log(this)},2]; arr[0].say(); //这里指向就是obj arr[1](); //指向的是arr //再看看这个 obj['say']();//这里是用了对象的[]语法,实际上与.语法一样的所以是对象调用模式,指向的是obj,而不是window
4.上下文调用模式
这个模式虽说叫上下文,但我个人感觉叫借用这个名字更容易理解
作用:改变this的指向
使用场景:借用其他类型的方法,自己又没有这个方法
方法:call apply bind,根据不同的情况指向也不同,具体用法请查看百度
你的努力有资格到拼天赋的程度吗?