Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript中的Shape类?_Javascript_Prototype - Fatal编程技术网

javascript中的Shape类?

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

我正在尝试制作一个小的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;
    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();