我总是看到Class.prototype.method的例子,但从未见过this.prototype.method的实例。例如:
function Class() {
this.prototype.method = function() {
alert("is this allowed?");
};
}vs
function Class() {}
Class.prototype.method = function() {
alert("traditional example");
};发布于 2014-03-02 05:06:19
this.constructor.prototype应该。this.constructor === Class),但不具有相同的意图。new Class实例将从Class.prototype继承。因此,prototype对象很适合定义所有实例都可以访问的共享值。然后,构造函数只需设置每个实例所特有的状态。
但是,尝试混合2并在构造函数中设置prototype属性有几个问题,包括鸡或蛋冲突,因为该方法在创建第一个实例之前不存在:
函数类() { this.constructor.prototype.method =函数() {};}console.log(Class.prototype.method类型);//“未定义”var a=新类();console.log(Class.prototype.method类型);//“函数”
并且在使用每个附加实例重新创建该方法时,prototype的一些优点也被忽略了:
var方法= a.method;console.log(a.method ===方法);// true var b=新类();console.log(a.method ===方法);// false发布于 2014-03-02 04:54:59
this.prototype将引用类对象的实例。它不会给你太多的好处,因为它的范围。
Class.prototype正在向类添加功能,而不是它的实例。
发布于 2014-03-02 05:05:26
Class是一个函数,this是一个对象。函数具有prototype属性;对象没有。在对象上定义了一个__proto__属性,但是这个接口是不推荐的。你可以做这样的事
function Class () {
var prototype = Object.getPrototypeOf(this);
prototype.method = function () {};
}在构造函数中--但这并不是很好的实践--每次实例化Class时,它都会不必要地浪费在原型上覆盖method的周期,而且在代码更复杂的情况下,最终也可能会浪费内存。
简而言之,这样做没有好处,也可能有严重的负面影响。
https://stackoverflow.com/questions/22123965
复制相似问题