摘要:先寫一個構造函數這樣就創建了函數的私有變量為什么函數對象的定義是具有私有字段的對象,構造器對象的定義是具有的對象。但是他們并不總是一致的。的執行大概有以下步驟基于對象的原型創建一個新的對象,把傳給。
先寫一個構造函數
function NumberCount() { this.number = 500 return { getNumber: ()=> { return this.number } } }
let n = new NumberCount;
console.log(n.getNumber()) // 500
console.log(n.number) // undefined
這樣就創建了函數的私有變量
為什么?函數對象的定義是:具有 [[call]] 私有字段的對象,構造器對象的定義是:具有[[construct]]的對象。
換句話說任何對象實現了[[call]]就是函數對象,可以當做函數被調用,實現了[[construct]]就是構造器對象,可以作為構造器被調用。但是他們并不總是一致的。
[[construct]]的執行大概有以下步驟
基于對象的原型Object.prototype創建一個新的對象,把this傳給[[call]]。如果[[call]]的返回值是一個對象,返回這個對象,如果返回不是對象,就返回基于原型創建的新的對象。
所以文章開頭的代碼也就一目了然,為什么通過getNumber能獲取到 直接n.number卻不能獲取到
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/101780.html
摘要:函數用于指定對象的行為。關于屬性只在構造器函數的原型上才有的屬性并指向該構造器,改寫了的原型對象默認是沒有屬性的。函數化工廠模式在偽類模式里,構造器函數不得不重復構造器已經完成的工作。 1.對象適合于收集和管理數據,容易形成樹型結構。Javascript包括一個原型鏈特性,允許對象繼承另一對象的屬性。正確的使用它能減少對象的初始化時間和內存消耗。2.函數它們是javascript的基礎...
摘要:但采用構造器調用模式,即是使用了前綴去調用一個函數時,函數執行的方式會改變。對象包含構造器需要構造一個新的實例的所有信息。構造器的變量和內部函數變成了該實例的私有成員。 JavaScript 是一門弱類型語言,從不需要類型轉換。對象繼承關系變得無關緊要。對于一個對象來說重要的時它能夠做什么,而不是它從哪里來。 閱讀《javascript語言精粹》筆記! 偽類 js的原型存...
面向對象的語言有一個標志,即擁有類的概念,抽象實例對象的公共屬性與方法,基于類可以創建任意多個實例對象,一般具有封裝、繼承、多態的特性!但JS中對象與純面向對象語言中的對象是不同的,ECMA標準定義JS中對象:無序屬性的集合,其屬性可以包含基本值、對象或者函數。 我們首選要了解封裝、繼承、多態又有如何特點 封裝:顧名思義來封裝變量和函數封裝->特點:高度復用,降低冗余度,更有利于模塊化編程,能夠為...
摘要:因為可能存在一個同名的構造函數,當你調用的時候,解析器需要順著作用域鏈從當前作用域開始查找,直到找到全局構造函數為止。 簡介 在軟件開發過程中,模式是指一個通用問題的解決方案。一個模式不僅僅是一個可以用來復制粘貼的代碼解決方案,更多地是提供了一個更好的實踐經驗、有用的抽象化表示和解決一類問題的模板。 對象有兩大類: 本地對象(Native):由ECMAScript標準定義的對象 宿主...
摘要:給添加屬性給的原型對象添加屬性原型鏈在中,每個對象都有一個屬性,其保存著的地址就構成了對象的原型鏈。實例變量實例函數原型鏈繼承有了原型鏈,就可以借助原型鏈實現繼承。是中唯一一個處理屬性但是不查找原型鏈的函數。 前端學習:教程&開發模塊化/規范化/工程化/優化&工具/調試&值得關注的博客/Git&面試-前端資源匯總 歡迎提issues斧正:原型&原型鏈&原型繼承 JavaScript-原...
閱讀 3205·2021-11-17 09:33
閱讀 3288·2021-11-15 11:37
閱讀 2950·2021-10-19 11:47
閱讀 3199·2019-08-29 15:32
閱讀 1001·2019-08-29 15:27
閱讀 1525·2019-08-29 13:15
閱讀 932·2019-08-29 12:47
閱讀 2023·2019-08-29 11:30