1. 程式人生 > 實用技巧 >JS中this各種指向小結

JS中this各種指向小結

此處分普通函式和箭頭函式兩種形式展開說明

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的一些說明