2013-04-08 62 views
1

我想制作一个小形状辅助对象来帮助我在html 5画布上绘制形状。到目前为止,我已经;javascript中的形状类?

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,这将有助于建立其他形状,并分配形状应具有一些共同的特性,例如,CircleRect ECT?

我努力学习JavaScript,所以如果代码是遥远请解释原因,我怎么能更好的IT,

感谢。

回答

3

proto = new Shape();

此分配proto变量来引用新Shape实例。
它不影响Circle.prototype,该变量曾发生过之前的情况。


请注意,您正在运行的Shape()构造函数初始化该圆的原型,这可能不是一个好主意。
相反,你可以写

Circle.prototype = Object.create(Shape.prototype); 

此代码将创建一个新的对象,它继承了Shape.prototype,不运行它的构造。

+0

有什么用'一个Circle.prototype =新形状()'可能存在的问题?我经常看到这种代码,主要是在没有实现ES5的浏览器时。 – 2013-04-08 00:26:01

+0

将原型存储在变量中不是一个好主意吗? – user2251919 2013-04-08 00:27:18

+1

@ user2251919对象通过引用传递。您正在存储对'proto'变量中的'Circle.prototype'对象的引用。将一个新对象指定给'proto'不会影响'Circle.prototype',而是只为'proto'变量指定一个新的引用。 SLaks在答案的第一部分解释它。 – 2013-04-08 00:30:02

0

改变这一行:

proto = Circle.prototype; 

proto = new Shape(); 

有:

Circle.prototype = new Shape();