下面的代码与道格拉斯·克罗克福德(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>
答案 0 :(得分:8)
您将方法添加到Quo
函数对象,而不是其原型,因此不会被使用new Quo()
创建的实例继承。以这种方式添加的函数有点像经典OOP语言中的静态方法 - 可以使用Quo.get_status()
调用它,但它不会被实例继承而this
将引用{{ 1}}功能本身。
Quo
答案 1 :(得分:0)
函数是JavaScript中的对象。向函数添加属性时,它们不会被该函数的实例继承。但是,当您向函数原型添加属性时,它们将被继承。要了解基于原型的继承如何在JavaScript中工作,请阅读following answer。