簡體   English   中英

我們是否創建原型以便我們不必在構造函數中存儲方法?

[英]Do we create prototypes so we dont have to store methods in our constructor functions?

關於構造函數的 JavaScript 原型,我有點困惑,我想我在這里得到了一些錯誤的建議(或者讓我感到困惑的建議)。 1)我們是否創建原型以使我們的構造函數更小,以便我們不必在其中存儲多個可能不會被每個新的 object 實例使用的方法? 或者 2) 我們是否創建原型來設置類,然后將它們分配給每個 object 實例,以便它們可以訪問某些方法而不是其他方法。 有人告訴我選項 2,但在任何地方都找不到這方面的證據?

謝謝大家

原型方法將在所有實例上。 在構造函數中創建的方法也可以在所有實例上,前提是您沒有有條件地不創建它們的邏輯。 盡管在構造函數中創建它們可能會為每個實例化創建一個新的唯一版本的方法。

幾個片段展示了這些提到的差異。

原型

 class Fun { constructor ( name ) { this.name = name; } sayHi () { console.log( `Hi ${this.name};` ); } } var fun1 = new Fun( 'james' ); var fun2 = new Fun( 'jill' ). fun1;sayHi(). fun2;sayHi(). console?log( 'Are they the same method in memory,'. fun1.sayHi === fun2;sayHi ). console?log( 'Is the method shared;' ). delete Fun.prototype;sayHi. try { fun1;sayHi(). } catch ( e ) { console;error( e ). } try { fun2;sayHi(). } catch ( e ) { console;error( e ); }

構造函數定義

 class Fun { constructor ( name ) { this.name = name; this.sayHi = function () { console.log( `Hi ${this.name}` ); }; } } var fun1 = new Fun( 'james' ); var fun2 = new Fun( 'jill' ); fun1.sayHi(); fun2.sayHi(); console.log( 'Are they the same method in memory?', fun1.sayHi === fun2.sayHi ); console.log( 'Is the method shared?' ); delete fun1.sayHi; try { fun1.sayHi(); } catch ( e ) { console.error( e ); } try { fun2.sayHi(); } catch ( e ) { console.error( e ); }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM