簡體   English   中英

Javascript:Object或Object.prototype?

[英]Javascript: Object or Object.prototype?

我只是學習了Java語言中的原型(不是框架,而是本機功能)。 我完全理解了,至少使用了其中一種。 例:

Array.prototype.myMethod = function(){
   /*do something super awesome*/
}
var a = [];
a.myMethod();

在繼續閱讀時,我看到了一個示例,其中作者通過執行以下操作向Object對象添加了subClass方法:

Object.subClass = function(hash){/*return an extended object that inherits Object's attributes*/}

目標是創建一種類似於面向對象的語言語法的方法。 由於我希望本書的作者使用原型功能定義這種方法,因此我的問題是:

  • 為什么不使用原型
  • 將方法直接添加到對象而不是附加到對象的原型是否更具風險?
  • 在某些情況下,我更喜歡一種方法

為什么不使用原型?

因為如果使用了原型,則subClass方法僅在Object實例上可用。 例如,要調用subClass ,需要以下步驟:

Object.prototype.subClass = function(hash) { /* return an extended object that inherits Object's attributes */ };
function MyClass() { };

var myInstance = new MyClass();
var mySubClassInstance = myInstance.subClass(); // only accessible on instances

因為筆者想這並沒有太大的意義subClass返回對象的擴展實例。 目的不是創建父“類”的實例,然后從該實例返回新的子實例。 沒必要

通過在Object正確定義它,無需先創建MyClass實例即可創建subClass實例:

Object.subClass = function(hash) { /* return an extended object that inherits Object's attributes */ };
function MyClass() { };

var mySubClassInstance = MyClass.subClass();

將方法直接添加到對象而不是附加到對象的原型是否更具風險? 在某些情況下,我更喜歡一種方法。

  • 添加到原型以將成員添加到該對象的實例。
  • 添加到對象以向該對象添加成員(類似於靜態成員的想法)。

如果希望方法能夠訪問類實例(使用this關鍵字),請使用prototype。 如果不需要this ,則將function聲明為類本身的成員,以便您可以在沒有對象的情況下調用它。

暫無
暫無

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

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