ros*_*oli 17 javascript prototype
如果我有一个构造函数 Quo
var Quo = function (string) {
this.status = string;
};
Run Code Online (Sandbox Code Playgroud)
然后用一个新的对象 var myQuo = new Quo("confused");
会有什么区别:
Quo.get_status = function () {
return this.status;
};
Run Code Online (Sandbox Code Playgroud)
和
Quo.prototype.get_status = function () {
return this.status;
};
Run Code Online (Sandbox Code Playgroud)
Pet*_*son 16
我们假设你已经创建了myQuo,正如你所描述的那样
var myQuo = new Quo("confused");
Run Code Online (Sandbox Code Playgroud)
如果您定义get_status为属性Quo,那么要获取myQuo您必须调用的状态Quo.get_status.但是,Quo.get_status需要知道对象上下文(myQuo)才能返回正确的status值.您可以重新定义函数以接受对象作为参数,如下所示:
Quo.get_status = function (quo) {
return quo.status;
};
var status = Quo.get_status(myQuo);
Run Code Online (Sandbox Code Playgroud)
或者,您可以Quo.get_status在问题中保留函数,但是您需要以绑定myQuo到"this" 的方式调用函数:
Quo.get_status = function() {
return this.status;
};
var status = Quo.get_status.call(myQuo);
Run Code Online (Sandbox Code Playgroud)
两种解决方案都很尴尬.首选的解决方案是利用Javascript的原型功能,并定义get_status为可在本地访问所有Quo对象的原型函数,例如myQuo.
Quo.prototype.get_status = function () {
return this.status;
};
var status = myQuo.get_status();
Run Code Online (Sandbox Code Playgroud)
Kyl*_*ten 15
定义函数时,它具有一个属性prototype,该属性用作[[prototype]]使用new关键字创建的所有对象的属性.当您添加成员时Quo.prototype,使用的所有对象new Quo()都将能够读取该成员(就像它们一样)([[prototype]]即通过它们Quo.prototype).另一方面,如果Quo直接分配成员,则只能通过Quo自身访问它们.
例:
var Quo = function (status) {
this.status = status;
}
Quo.status = "enlightened";
Quo.get_status = function() {
return this.status;
}
Quo.prototype.get_status = function() {
return this.status;
}
var quo = new Quo("confused");
Quo.get_status(); // "enlightened"
quo.get_status(); // "confused"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3643 次 |
| 最近记录: |