js this 指向 問題小結
阿新 • • 發佈:2022-03-09
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
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