JavaScript >> Javascript 文檔 >  >> Tags >> object

裸 JavaScript 對象

我在瀏覽 Narcissus(用 JavaScript 編寫的 JavaScript 解釋器)的一個源文件時,遇到了我之前可能錯過的一行:

var keywords = {__proto__: null};

__proto__ 屬性只能在 Firefox、Safari、Rhino 和 ActionScript 中訪問,並且是將對象實例與其原型聯繫起來的屬性。關於 JavaScript 的一個鮮為人知的事實是,對象實例與其構造函數無關,只與原型無關。 __proto__ 屬性暴露了這種關係。

與大多數屬性一樣,__proto__ 可以被覆蓋。這樣做會改變對象的原型鏈。 Narcisuss 的代碼有效地創建了一個沒有原型鏈的 JavaScript 對象,因此所有對像都沒有從 Object 繼承的方法 .結果?一個沒有任何屬性的真正裸露的基礎對象。切斷原型鏈也可以確保對 Object.prototype 的更改 不會影響 for-in 的使用 .這真的很有趣:

var o = { __proto__: null };<br /> alert(o.toString); //undefined

有趣的是,這似乎是創建裸對象的唯一方法。您可以定義一個原型設置為 null 的構造函數 ,但使用該構造函數創建實例會自動將原型重置為 Object .示例:

function MyObject(){}<br /> MyObject.prototype = null;<br /> var o = new MyObject();<br /> alert(o.toString); //function

我不知道這些信息有什麼用處,但肯定很有趣。


Tutorial JavaScript 教程
  1. 將包發佈到 NPMJS.com 目錄📦

  2. 你更喜歡 ReactJS 的後端是什麼?

  3. Chrome 擴展程序

  4. 使用 Passport-JWT 設置 Node.js API 的分步指南

  5. 如何在反應中使用jsPDF並為其添加樣式?

  6. 如何在 javascript 中創建模塊工作者

  7. 幾個項目如何幫助我顯著提高我的技能。

  1. 為什麼我的實時服務器不能在 Visual Studio 代碼中工作?

  2. 使用 Next.js 進行 Mobx 服務器端渲染

  3. 在 Meteor 項目中安裝 Tailwind CSS 2

  4. React Native Flatlist 真實世界用例教程

  5. 從 framer-motion v2.2 介紹 AnimateSharedLayout

  6. Uncaught (in promise) TypeError:Cannot set property ‘playerName’ of undefined at eval

  7. 使用 Angular 和 CucumberJS 的 BDD

  1. 使用 Arduino 和 Javascript 顯示 LED 的 ram 使用情況!

  2. React 故事書入門

  3. 揭秘 React 中的服務器端渲染

  4. 我每天使用的 VS Code 擴展