首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

JavaScript this.xx = function 與 var xx = function 區別:this 指向陷阱

     編輯:程式設計綜合問答

在建構函式中,this.add = function() {...} 將方法綁定到實例;var add = function() {...} 只是區域變數,無法透過 this.add 呼叫。

問題重現

function Test() {
    this.add = function() { alert(1); };
    var self = this; // 保存 this 參考
    this.modAdd = function() {
        self.add(); // 正確:用 closure 捕獲的 self
        // this.add(); // 錯誤:此處 this 指向全域/undefined
    };
}
new Test().modAdd();

核心差異表

寫法儲存位置呼叫方式this 指向
this.fn = function() {}實例屬性obj.fn()指向實例
var fn = function() {}區域變數 (closure)fn()指向全域/undefined (strict)
Test.prototype.fn = function() {}原型鏈obj.fn()指向實例

最佳實踐

  • 方法定義在 prototype 上,節省記憶體。
  • 回調/事件處理器用 arrow function 或 .bind(this) 固定 this。
  • 避免在建構函式內用 var 定義需對外暴露的方法。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved