JS中this各種指向小結
阿新 • • 發佈:2020-08-22
此處分普通函式和箭頭函式兩種形式展開說明
01.在定義或呼叫物件時
let obj = { name: "zhangsan", showname() { return this.name; }, }; console.log(obj.showname()); //zhangsan
在物件的方法中,普通函式的this指向的是物件本身;
let obj = { name: "zhangsan", showname: () => { return this.name; }, }; console.log(obj.showname()); //undefined
箭頭函式指向的是其父級所在作用域的this---windows,列印結果為undefined;
02.多層函式巢狀的時
let obj = { name: "zhangsan", printName: function (times) { function start(times) { for (let i = 0; i < 4; i++) { console.log(this.name); //undefined //undefined //undefined //undefined } } start(times); }, }; obj.printName(4);
此時普通函式指向的是window,所以列印了四次undefined,接下來試試箭頭函式;
let obj = { name: "zhangsan", printName: function (times) { let start = (times) => { for (let i = 0; i < times; i++) { console.log(this.name); //zhangsan //zhangsan //zhangsan //zhangsan } }; start(times); }, }; obj.printName(4);
由於this的父級作用域為printName所在作用域,此時的this指向obj,成功打印出zhangsan;
需要注意的是,有些系統提供的方法中,會讓我們傳如this,例如map和forEach等,下面是MDN的一些說明