首頁 >web前端 >js教程 >JavaScript 中的「this」和「prototype」有什麼差別?

JavaScript 中的「this」和「prototype」有什麼差別?

Patricia Arquette
Patricia Arquette原創
2025-01-05 17:58:39819瀏覽

What's the Difference Between `this` and `prototype` in JavaScript?

理解JavaScript 中「原型」與「this」的微妙之處

簡介

在JavaScript 程式設計領域,術語「原型」 ' 和'this' 在物件導向開發中起著至關重要的作用。然而,他們獨特的行為可能會導致混亂。本文旨在闡明這些概念之間的差異,並全面了解它們的用法。

'prototype' 與 'this'

'this'

“this”是一個特殊關鍵字,指的是調用函數的當前上下文。它提供對物件的實例屬性和方法的存取。如果呼叫函數時不使用「new」運算符,「this」將預設為全域物件(瀏覽器環境中的視窗)。

'prototype'

'prototype' 是一個屬性提供了一種在函數的多個實例之間共享屬性和方法的方法的函數。此函數的每個實例都可以透過其隱藏的 [[Prototype]] 屬性存取原型的屬性和方法。

範例場景

場景1:

直接在上面定義一個方法函數:

var A = function () {
    this.x = function () {
        // Do something
    };
};

在這種情況下,表達式'this.x()' 引用'window.x()',因為'this' 預設為全域物件。

場景2:

定義一個方法prototype:

var A = function () { };
A.prototype.x = function () {
    // Do something
};

這裡,'x()'方法被分配給原型物件(' A.prototype')。這允許“A”的所有實例存取“x()”方法。

附加說明

  • 建構子使用「new」運算子來建立函數的實例。當使用“new”呼叫函數時,“this”會綁定到一個新物件。
  • 將物件序列化為 JSON 將僅包含其自身的屬性,而不包含原型上定義的屬性。

相關問題

  • JavaScript 的原型是什麼性質?
  • 「this」關鍵字在 JavaScript 的表現如何?
  • JavaScript 中函數的作用域是多少?

記憶體注意事項

值得注意的是,使用「原型」來共享方法不一定會帶來顯著的記憶體節省。但是,與每個實例都有自己的方法副本相比,它通常會減少記憶體消耗。

以上是JavaScript 中的「this」和「prototype」有什麼差別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn