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

JavaScript 物件無法直接調用函數:函數未掛載為物件屬性/方法

     編輯:程式設計疑難解答

錯誤代碼

var person = { name: "Tom" };
function getName() { return this.name; }
// person.getName() // 報錯:person.getName is not a function

原因

person 與 getName 是兩個**獨立變數**,無任何關聯。物件只能調用**自身屬性**(含繼承鏈)上的函數。

正確掛載方式

// 1. 字面量定義時掛載
var person = {
    name: "Tom",
    getName: function() { return this.name; }
};

// 2. 後續動態掛載
person.getName = function() { return this.name; };

// 3. 原型鏈掛載(所有實例共享)
function Person(name) { this.name = name; }
Person.prototype.getName = function() { return this.name; }
var p = new Person("Tom");
p.getName(); // "Tom"

關鍵概念:this 綁定

  • 函數作為**物件方法**調用時(obj.method()),this 指向該物件。
  • 函數**單獨調用**(getName()),非嚴格模式 this 指向 window,嚴格模式為 undefined。

常見誤區

var getName = person.getName;
getName(); // this 丟失,輸出 undefined 或報錯
// 修正:用 bind 固定 this
var boundGetName = person.getName.bind(person);
boundGetName(); // "Tom"

理解「函數是獨立值,掛載到物件才成方法」是 JS 物件導向核心。

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