作为函数在全局调用,this的指向是window
var name = '卡卡'; function cat() { var name = '有鱼'; console.log(this.name);//卡卡 console.log(this);//window } cat();
作为对象中的某个方法被调用,this指向该对象
一层作用域链
var name = '卡卡'; var cat = { name: '有鱼', eat: function () { console.log(this.name); // 因为函数eat是由cat对象调用的,所以this指向的是cat本身,所以cat.name=有鱼; console.log(this);//{name: '有鱼', eat: ƒ} } } cat.eat();
多层作用域链时,this指向最近的
var name = '卡卡'; var cat = { name: '有鱼', eat1: { name: '年年', eat2: function () { console.log(this.name);//年年 console.log(this);//{name: '年年', eat2: ƒ} } } } cat.eat1.eat2();
构造函数的调用,this指向实例化新对象
var name = '卡卡'; function Cat(name) { this.name = name; console.log(this) } var cat1 = new Cat('有鱼');//Cat {name: '有鱼'} console.log(cat1.name);// 有鱼
匿名函数的调用,this指向全局对象
var name = '卡卡'; var cat = { name:'有鱼', eat:(function(){ console.log(this.name);//卡卡 })() } cat.eat;
标签:console,name,指向,一下,cat,var,有鱼,log From: https://www.cnblogs.com/qianduan-Wu/p/16648617.html