一。在全局环境里面永远值向window,普通函数的调用也指向window。
var name = "张三";
function fn(){
var name = "李四";
console.log(this); // window;
console.log(this.name); // 张三
}
fn();
二。作为对象调用时,则指向对象。没有调用则取向于最终调用的对象。
var name = 'Jane';
var person = {
name: 'Abby',
sayName: function() {
console.log(this.name);
}
};
var sayNameWin = person.sayName; // 该变量为全局变量,所以指向window;
person.sayName(); //Abby
sayNameWin(); //Jane 作为 window 的方法被调用的
三。当多层调用时,this指向调用他的上一级。没有调用则指向最终的对象
var name = 'Jane';
var person = {
name: 'Abby',
sayName: {
name: "ken",
fn: function() {
console.log(this.name);
}
}
};
var sayNameWin = person.sayName.fn;// 该变量为全局变量,所以指向window;
person.sayName.fn(); //Ken
sayNameWin(); //Jane 作为 window 的方法被调用的
四。作为构造函数使用时,this指向new出来的对象。
function Person(name) {
this.name = name;
console.log(this); //Person {name: "Abby"}
}
var person = new Person('Abby');
console.log(person.name); //Abby
五。作为call/apply/bind方法调用,则指向传入的值。
var person = {
name: 'Abby'
};
function fn() {
console.log(this); //Object {name: "Abby"}
console.log(this.name); //Abby
}
fn.call(person); // 三个函数的指向是一样的。



被折叠的 条评论
为什么被折叠?



