本篇文章為大家帶來了關於javascript的相關知識,其中主要介紹了關於原型鏈的相關問題,原型鏈指一些原型透過__proto__指標構成的鍊錶,一個原型鏈可以為想共享原型鏈中資料的物件服務,希望對大家有幫助。
相關推薦:javascript教學
#1.原型鏈
1.1 原型鏈解釋:
(概念) 原型鏈指一些原型透過__proto__指標構成的鍊錶,一個原型鏈可以為想共享原型鏈中資料的物件服務,用於實現JavaScript中的繼承機制。
-
(原型鏈指標) 原型鏈中涉及的指標:
- 每個物件都有一個__proto__指標來存取物件的原型
- 每個原型都是一個用來實現繼承的對象,除了有__proto__指標之外,還有constructor指標指向建構函式
- 每個函式都是一個對象,除了有__proto__指針之外,還有prototype指針指向與之關聯的原型對象,prototype的指向和__proto__指向不一定相同。
1.2 不涉及繼承的原型鏈圖示:
- 建構子類型原型鏈:原型鏈服務的物件由建構子產生(這張圖非常重要,涉及了底層的鏈,網路上也有類似的圖)
function A() { } let a1 = new A() let a2 = new A() let a3 = new A() // 这几行代码会产生下面图示的原型链
- 非建構子類型原型鏈:原型鏈服務的物件由工廠函數,物件字面量,Object.create等方式產生
let A = { test: "" } let a1 = Object.create(A) let a2 = Object.create(A) let a3 = Object.create(A) // 这几行代码对应下面图示的原型链
- 簡化的原型鏈:實際考慮原型鏈時往往不需要考慮“建構函式Function的實例對應的原型鏈”,甚至"原型鏈終點"和"Object.prototype"都不需要考慮。因為涉及複雜的繼承關係時考慮這些偏底層的內容不利於分析。 一般分析時使用下面的兩個簡化圖分析即可。
function A() { } let a1 = new A() let a2 = new A() let a3 = new A() // 这几行代码会产生下面图示的原型链
1.3 涉及繼承的原型鏈圖示
#涉及繼承的原型鏈使用簡化圖分析即可
// 使用寄生组合模式实现继承 function C() {} function B() {} B.prototype = new C() function A() {} A.prototype = new B() let a1 = new A() let a2 = new A() let a3 = new A()
1.4 原型鏈終點
原型鏈的終點是null,並不是指某個原型物件
1.5 原型的動態性
原型的動態性在「物件導向程式設計」中詳細解釋過,主要涉及的是原型的重寫和修改。這裡列舉幾個例題。
範例1—原型的動態性
var A = function() {}; A.prototype.n = 1; var b = new A(); A.prototype = { n: 2, m: 3 } var c = new A(); console.log(b.n); // 1 console.log(b.m); // undefined console.log(c.n); // 2 console.log(c.m); // 3
範例2—原型的動態性&原型鏈底層鏈
var F = function() {}; Object.prototype.a = function() { console.log('a'); }; Function.prototype.b = function() { console.log('b'); } var f = new F(); f.a(); // a f.b(); // 并不存在b属性 F.a(); // a F.b(); // b
參考上述提到的「不涉及繼承的原型鏈圖示」中的第一幅圖可以畫出如下簡化參考圖分析問題。
範例3—原型動態性&原型鏈底層鏈
function Person(name) { this.name = name } let p = new Person('Tom'); console.log(p.__proto__) // Person.prototype console.log(Person.__proto__) // Function.prototype
範例4—原型動態性&原型鏈底層鏈
var foo = {}, F = function(){}; Object.prototype.a = 'value a'; Function.prototype.b = 'value b'; Object.prototype = { a: "value a" } Function.prototype = { b: "value b" } console.log(foo.a); // value a console.log(foo.b); // undefined console.log(F.a); // value a console.log(F.b); // value b
參考上述提到的「不涉及繼承的原型鏈圖示」中的第一幅圖可以畫出如下簡化參考圖分析問題。 由於foo和F宣告時它們就將自己的原型進行綁定,它們透過堆疊記憶體中儲存的指標來取得堆疊記憶體中儲存的原型的位址。首先進行了原型的修改操作,修改操作會在堆疊記憶體上修改原型,foo和F透過堆疊記憶體的指標仍然可以存取到修改後的結果。第二步進行了原型的重寫,JS都是“傳值操作”,重寫原型後,首先在堆內存中開闢一塊新空間存儲新的原型,然後在棧內存重新開闢一個空間存儲指向堆內存的指針。此時由於foo和F所持有的堆疊記憶體指標和新的堆疊記憶體指標不同,所以foo和F無法存取到重寫後的原型。
相關推薦:javascript學習教學
#以上是圖文詳解JavaScript原型鏈的詳細內容。更多資訊請關注PHP中文網其他相關文章!

JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。

理解JavaScript引擎內部工作原理對開發者重要,因為它能幫助編寫更高效的代碼並理解性能瓶頸和優化策略。 1)引擎的工作流程包括解析、編譯和執行三個階段;2)執行過程中,引擎會進行動態優化,如內聯緩存和隱藏類;3)最佳實踐包括避免全局變量、優化循環、使用const和let,以及避免過度使用閉包。

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

Python和JavaScript在社區、庫和資源方面的對比各有優劣。 1)Python社區友好,適合初學者,但前端開發資源不如JavaScript豐富。 2)Python在數據科學和機器學習庫方面強大,JavaScript則在前端開發庫和框架上更勝一籌。 3)兩者的學習資源都豐富,但Python適合從官方文檔開始,JavaScript則以MDNWebDocs為佳。選擇應基於項目需求和個人興趣。

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Dreamweaver CS6
視覺化網頁開發工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

禪工作室 13.0.1
強大的PHP整合開發環境

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中