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

JavaScript 對象引用深度解析:變量、實例與原型鏈

     編輯:程式設計疑難解答

核心概念辨析

問題混淆了兩組概念:

  1. 類 vs 對象(面向對象建模)
  2. 實體 vs 引用(內存模型)

實體與引用:地址與房子

  • 實體:堆內存中實際的對象數據(屬性、方法),如「你家」。
  • 引用:棧內存中存儲的指向實體的地址,如「你家的地址」。

JavaScript 中所有對象類型(Object, Array, Function, Date, RegExp 等)均為引用類型,變量存儲的是引用(地址)。

代碼演示


let obj1 = { name: "張三" }; // obj1 存儲引用 addr1
let obj2 = obj1;             // obj2 複製引用 addr1,指向同一實體
obj2.name = "李四";
console.log(obj1.name); // "李四" —— 修改影響共享實體

// 原始類型為值類型
let a = 10;
let b = a; // 複製值 10
b = 20;
console.log(a); // 10 —— 互不影響

原型引用:

prototype 是對象的一個引用

function Person(name) {
    this.name = name;
}
Person.prototype.sayHi = function() {
    console.log("Hi, " + this.name);
};

let p1 = new Person("張三");
let p2 = new Person("李四");

console.log(p1.sayHi === p2.sayHi); // true
console.log(p1.__proto__ === Person.prototype); // true
console.log(p2.__proto__ === Person.prototype); // true
  • Person.prototype 是一個對象實體(包含 sayHi 方法)。
  • p1.__proto__ 和 p2.__proto__ 都是指向該實體的引用。
  • 實例通過引用訪問原型方法,實現共享,節省內存。

JS 無類概念

JS 是基於原型的對象語言,非面向類。通過構造函數 + 原型模擬類行為:

  • 構造函數 Person 類比「類」。
  • new Person() 創建實例,實例 __proto__ 引用構造函數的 prototype。

總結

「原型是對象的一個引用」準確含義:實例內部隱藏屬性 [[Prototype]] (即 __proto__) 存儲著指向原型對象實體的引用地址。理解引用機制是掌握 JS 共享、變異、原型繼承的關鍵。

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