function Card(num,suit){
this.num = num;
this.suit = suit;
}
这里的this指向什么呢,最好举个例子
看你怎么用,this只有在你使用的时候才能确定其指向
function Card(num,suit){
this.num = num;
this.suit = suit;
}
创建对象
var obj=new Vard(1,2)
this指向一个以Card.prototype为原型的空对象
Card(1,2)
this指向 window对象
var obj={}
Card.call(obj,2,3)
this指向obj对象
这里的 this 指向执行时所在的对象
比如,立即函数:
Card(2, 3)
这里的 this 指向 window,(非严格模式),
再比如,如果是对象的方法,
var obj = {};
obj.card = Card;
obj.card();
这个时候 this 指向 obj 啦。
call apply 还能指定 this 的指向。
所以要函数执行的时候,才能得知 this 的指向。
以上的都说的差不多了,我再补充一个ES6中箭头函数的this指向:
let person = {
name: "galler",
speak: ()=> {
console.log(this);//window
console.log(this.name); //""
}
};
person.speak();
函数本身是没有this的,只能向外找this继承,找到后发现this指向window(浏览器环境),而window下没有name属性,所以this.name = ""(空)
《javascript高级程序设计》中有说到:this对象是在运行时基于函数的执行环境绑定的:在全局函数中,this等于window,而当函数被作为某个对象调用时,this等于那个对象。不过,匿名函数具有全局性,因此this对象同常指向window
不过针对于匿名函数this具有全局性的观点仍是有争议的,具体this作用域问题可参考
【Javascript】深入理解this作用域问题以及new运算符对this作用域的影响
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
this的指向不是在声明的时候确定的而是在调用的时候被定义的有这么几种情况