讓我們創建一個簡單的構造函數:構造函數:這裏的「公共」性質位於內存上運行時
function User(firstName) {
this.firstName = firstName;
this.sayHi = function() {
console.log('Hi, my name is ' + this.firstName);
};
}
很明顯,我們不能這樣寫代碼:
console.log(User.firstName); //undefined
console.log(User.sayHi); //undefined
讓我們畫用戶構造函數對象如何位於內存運行時:
______________ | | | User | |______________| | prototype | |______________| | name | |______________| | length | |______________| | arguments | |______________|
所以,我們知道原型,姓名,長度和參數屬性是任何函數對象的默認值。事實上,函數對象中沒有字段firstName和sayHi。
所以,問題是: 在內存中的位置屬性 「名字」 和 「sayHi的」,直到解釋調用代碼是這樣的:提前
var user = new User('Bob');
感謝
你會想要使用setters和getters。例如User.getfirstname()。試圖公開訪問私有變量是不好的OOP。不只是壞,但平原,錯誤。 – Fallenreaper
只有將它們添加到構造函數中的對象後,它們纔會存在。 – Musa
這個問題不是關於面向對象的優點或錯誤。我談論的是內存問題 - 在用「新」關鍵字解析構建之前,運行時解釋器在哪裏定位公共屬性? –