js this 指向 问题小结
function name() {
var a = "A";
console.log(this.a); //undefined 如果a 在函数体外,则结果是A
console.log(this); //Window
};
name(); 相当于 window.name()
var n = {
name: "LonJin",
fn: function() {
console.log(this.name) //LonJin 谁调用指向谁
}
};
n.fn();
var n = {
name: "LonJin",
fn: function() {
console.log(this.name) //LonJin
}
};
window.n.fn(); 永远指向最近的一层,这里this指向n
var n = {
a: 10,
b: {
a: 12,
fn: function() {
console.log(this.a) //12 永远指向最近的一层 如果b 没有a 属性,这里会显示undefine
}
}
};
n.b.fn();
//当有return 的时候
//如果返回值是一个对象,那么this指向的就是那个返回的对象,如果返回值不是一个对象那么this还是指向函数的实例。
function fn() {
this.user = "LonJin";
return {}
};
var a = new fn();
console.log(a.user); //undefined
function A() {
this.name = name
return {
name: 10
}
}
const b = new A()
console.log('b', b); // 10
//这里的 指的是return 的函数
var x = 20;
var a = {
x: 15,
fn: function() {
console.log(this);
var x = 30;
return function() {
return this.x
}
}
}
console.log((a.fn())()); //立即执行函数this 指向window 20
console.log(a.fn()()) //这相当于function(){}() 也是立即执行函数 //20
console.log(a.fn().call(this)) //20
console.log(a.fn().call(a)) //15

浙公网安备 33010602011771号