以下代码与道格拉斯·克罗克福德(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函数对象,而不是其原型(prototype),因此使用new Quo()创建的实例不会继承该方法。以这种方式添加的函数有点像经典OOP语言中的静态方法-可以用Quo.get_status()调用,但是它不会被实例继承,并且this将引用Quo函数本身。

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

关于javascript - 有关构造函数调用模式的Crockford代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11662451/

10-11 23:44