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

JavaScript 物件字面量中訪問屬性:為何需使用 this 或 物件名而非直接變數名

     編輯:程式設計綜合問答

代碼片段:

var p = {
    name: 'stephen',
    age: 23,
    info: function() {
        document.write('我的名字是:' + name); // ①
        document.write('我的年齡:' + age);   // ②
    }
};
p.info();

錯誤原因

  • name 和 age 是物件 p 的屬性,不在函數作用域鏈中。
  • 直接寫 name、age,JS 引擎會沿作用域鏈向上查找,最終在 window (全域物件) 找到 window.name(瀏覽器內建屬性,默認空字串),卻找不到 window.age,故第 ② 行拋出 ReferenceError: age is not defined。
  • 第 ① 行不報錯純屬巧合:window.name 存在且為字串類型,但值非預期的 'stephen'。

正確寫法

var p = {
    name: 'stephen',
    age: 23,
    info: function() {
        document.write('我的名字是:' + this.name); // 或 p.name
        document.write('我的年齡:' + this.age);   // 或 p.age
    }
};
p.info();

核心概念

  1. 物件屬性訪問必須通過物件引用:this.屬性名(方法調用時 this 指向調用物件)或 物件變數.屬性名。
  2. 無隱式作用域:JS 物件字面量不創建新作用域,屬性不會自動成為區域變數。
  3. this 綁定規則:p.info() 調用時,this 指向 p;若 var f = p.info; f(),this 指向 window(嚴格模式下為 undefined),此時必須用 p.name 硬綁定。

理解作用域鏈與 this 綁定,是避免此類低級錯誤的關鍵。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved