假设我将此父类Vector2
定义如下:
function Vector2 (x, y) {
this.x = x;
this.y = y;
}
Vector2.prototype.add = function(vec) {
console.log(Reflect.getPrototypeOf(this));
if (vec instanceof Vector2)
return new Vector2(this.x + vec.x, this.y + vec.y);
throw "This operation can only be performed on another Vector2. Recieved " + typeof vec;
};
Vector2
的{{1}}扩展名,应该继承其父级的所有功能,并具有将Size
和x
引用为{{1}的附加功能和y
分别如此:
w
最后,我有一个代码段,它创建了两个h
的新实例,将它们添加到一起,并尝试从function Size(x,y) {
this.x = x;
this.y = y;
}
Size.prototype = new Vector2;
Size.prototype.constructor = Size;
Size.prototype._super = Vector2.prototype;
Object.defineProperties(Size.prototype, {
'w': {
get: function() {
return this.x;
},
set: function(w) {
this.x = w;
}
},
'h': {
get: function() {
return this.y;
},
set: function(h) {
this.y = h;
}
}
});
属性中读取:
Size
如何修改w
的{{1}}方法来创建当前类的而不是通用类的新实例?
答案 0 :(得分:2)
我相信这可能是你正在寻找的东西。
return new vec.constructor(this.x + vec.x, this.y + vec.y);
使用传递给add方法的constructor
来创建返回的对象。
您还错误地将this
传递给new Vector2( this, ... )
。
答案 1 :(得分:2)
您的getter代码中存在错误:您需要使用self
而不是this
。
然后你可以用:
调用正确的构造函数return new this.constructor(this.x + vec.x, this.y + vec.y);
注意:你也可以使用vec.constructor
,这完全取决于你将一个Size对象添加到Vector对象时想要发生的事情。对我来说似乎更直观的是,源对象(应用了add
方法)确定了返回对象的类。如果您认为添加的对象应该确定返回的对象的类,则使用vec
而不是this
。