javascript中的Shape类?
我正在尝试制作一个小的shape helper对象来帮助我在HTML5画布上绘制形状。到目前为止,我有javascript中的Shape类?,javascript,prototype,Javascript,Prototype,我正在尝试制作一个小的shape helper对象来帮助我在HTML5画布上绘制形状。到目前为止,我有 var Shape = function (config) { this.initialize(config); }; var proto = Shape.prototype; proto.initialize = function (config) { this.x = config.x || 0; this.y = config.y || 0; th
var Shape = function (config) {
this.initialize(config);
};
var proto = Shape.prototype;
proto.initialize = function (config) {
this.x = config.x || 0;
this.y = config.y || 0;
this.width = config.width || 0;
this.height = config.height || 0;
this.color = config.color || false;
};
/*
Circle
*/
var Circle = function (config) {
this.initialize(config);
};
proto = Circle.prototype;
proto = new Shape();
但它似乎不起作用!当我呼吁创造一个新的循环这样
var s1 = new Circle({x: 10, y: 10, width: 10, height: 10, color: "red"});
如何创建一个基类Shape
,该基类将帮助设置其他形状,并指定形状应具有的一些公共属性,例如,Circle
,Rect
等
我正在尝试学习javascript,因此如果代码有问题,请解释为什么以及如何改进它
谢谢。proto=newshape()代码>
这将指定proto
变量以引用新的Shape
实例。
它不影响该变量先前引用的Circle.prototype
请注意,您正在运行Shape()
构造函数来初始化圆形原型,这可能不是一个好主意。
相反,你可以写作
Circle.prototype = Object.create(Shape.prototype);
此代码将创建继承Shape.prototype的新对象,而不运行其构造函数。更改此行:
proto = Circle.prototype;
proto = new Shape();
与:
Circle.prototype=new Shape()
可能存在哪些问题?我经常看到这种代码,主要是当涉及到未实现ES5的浏览器时。@user2251919对象是通过引用传递的。您正在proto
变量中存储对Circle.prototype
对象的引用。将新对象分配给proto
不会影响Circle.prototype
,而只会将新引用分配给proto
变量。SLaks在答案的第一部分解释了这一点。@Fabriciomatté1:如果Shape()
构造函数有副作用,或者创建了数组之类的东西,那么它可能会搞砸,因为每个实例实际上要运行两次构造函数(在原型中运行一次)
Circle.prototype = new Shape();