簡體   English   中英

Crockford關於構造函數調用模式的代碼

[英]Crockford's code concerning the Constructor Invocation Pattern

下面的代碼幾乎與Douglas Crockford的精湛書籍JavaScript:The Good Parts,第29-30頁中的一些代碼完全相同。 唯一的區別是他添加了get_status屬性,如下所示:

Quo.prototype.get_status=function() {
  this.status=string;
}

我的問題是為什么他的代碼運行正常,但我的小改動,下面,導致一個錯誤,說myQuo沒有get_status方法?

<script>
  var Quo=function(string) {
    this.status=string;
  }
  Quo.get_status=function() {
    return this.status;
  }
  var myQuo=new Quo("confused");
  alert(myQuo.get_status());
</script>

您將方法添加到Quo函數對象,而不是其原型,因此它不會被使用new Quo()創建的實例繼承。 以這種方式添加的函數有點像經典OOP語言中的靜態方法 - 可以使用Quo.get_status()調用它,但它不會被實例繼承, this將引用Quo函數本身。

Quo.status = "foo";
Quo.get_status(); // "foo"

函數是JavaScript中的對象。 向函數添加屬性時,它們不會被該函數的實例繼承。 但是,當您向函數原型添加屬性時,它們將被繼承。 要了解基於原型的繼承如何在JavaScript中工作,請閱讀以下答案

暫無
暫無

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

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