5

下面的代码几乎与 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>
4

2 回答 2

8

您将方法添加到Quo函数对象,而不是其原型,因此它不会被使用创建的实例继承new Quo()。以这种方式添加的函数有点像经典 OOP 语言中的静态方法——它可以用 调用Quo.get_status(),但它不会被实例继承,而是this引用Quo函数本身。

Quo.status = "foo";
Quo.get_status(); // "foo"
于 2012-07-26T05:28:19.503 回答
0

函数是 JavaScript 中的对象。当您向函数添加属性时,它们不会被该函数的实例继承。但是,当您将属性添加到函数的原型时,它们就会被继承。要了解基于原型的继承如何在 JavaScript 中工作,请阅读以下答案

于 2012-07-26T06:06:09.430 回答