如果我有一个构造函数
var Quo = function (string) { this.status = string; };
然后使用var myQuo = new Quo(“confused”)创建一个新对象;
有什么区别呢?
Quo.get_status = function () { return this.status; };
和
Quo.prototype.get_status = function () { return this.status; };
解决方法
假设你已经创建了myQuo,就像你所描述的那样
var myQuo = new Quo("confused");
如果将get_status定义为Quo的属性,那么要获取myQuo的状态,您必须调用Quo.get_status.但是,Quo.get_status将需要知道对象上下文(myQuo)来返回正确的状态值.您可以重新定义函数以接受对象作为参数,如下所示:
Quo.get_status = function (quo) { return quo.status; }; var status = Quo.get_status(myQuo);
或者,您可以在函数中保留Quo.get_status的功能,但您需要以将myQuo绑定到“this”的方式调用该函数:
Quo.get_status = function() { return this.status; }; var status = Quo.get_status.call(myQuo);
任何解决方案都是尴尬的.首选的解决方案是利用Javascript的原型功能,并将get_status定义为一个原型函数,这些函数将在本地对所有Quo对象(如myQuo)进行访问.
Quo.prototype.get_status = function () { return this.status; }; var status = myQuo.get_status();