一張圖學習常見this的指向

KyleLAN發表於2018-03-16

在寫JS程式碼時,this的出場頻率頗高,擔負了傳遞物件,作用域等等功能,堪稱全能超人。

superman
但是this複雜多變,初學的時候想弄清楚並不簡單,繞著繞著就迷路了。

“我是誰?我從哪來?我要到哪去?”

road
對於常見的this指向總結成一張簡圖,佐以示例程式碼食用,味道更佳。
this

示例程式碼

例1:

// 瀏覽器中
console.log(this);
複製程式碼

d1

例2:

// Node.js cli中
console.log(this);
複製程式碼

d2

// Node.js module中
// 具體原因可檢視Node模組作用域知識
//main.js
console.log(this === global);
console.log(this === module.exports); 
複製程式碼

d3

例3:

//瀏覽器中
function foo() {
    console.log(this);
}
foo();
複製程式碼

d4
例4:

//瀏覽器中
function foo() {
    "use strict";
    console.log(this);
}
foo();
複製程式碼

d5

例5:

// 瀏覽器中
var _this;
function Foo() {
    _this = this;
}
var foo = new Foo();
console.log(_this);
foo === _this;
複製程式碼

d6

例6:

// 瀏覽器中
var foo = {
    method: function() {
        console.log(this === foo);
    }
}
foo.method();
複製程式碼

d7

例7:

// 瀏覽器暫不支援ES6語法,在Node 8.0以上版本試驗
// test.js
function foo() {
	let bar = () => {
		console.log('from bar->' + this);
	};
	console.log('from foo->' + this)
	bar();
	// 箭頭函式免疫call/apply修改作用域
	bar.call(666); 
}
foo.call(555);
foo.call(777);
複製程式碼

一張圖學習常見this的指向

下一次總結this常見的陷阱及避坑建議( ̄. ̄)

參考

2ality.com/2014/05/thi…

相關文章