2

请看这个带有原型区域方法的简单圆形类的示例:

var Circle = function(radius) {
    this.radius = radius;
}

Circle.prototype.area = function() {
   return Math.PI*this.radius*this.radius;
}

上面声明的 area 函数与最初声明为 Circle 的公共方法有什么区别?无论哪种方式,圆的各个实例都有自己的区域,不是吗?有什么不同??

this.area = function(){return Math.PI*this.radius*this.radius;}
4

3 回答 3

3

this.area = function(){}创建一个函数并将其分配给 的area属性this一次Circle.prototype.area = function(){}创建一个函数,并将其分配给构造函数创建的对象。prototypeCircle()

于 2013-02-20T19:29:26.570 回答
3

如果你在构造函数中声明它,那么每个实例Circle都会有一个单独的函数副本。这只会浪费资源,因为所有Circle对象都可以共享相同的代码。

于 2013-02-20T19:29:55.250 回答
1

this指向函数对象的一个​​实例,.prototype“指向”创建实例的函数构造函数(只有一个)。通常在经典继承中,一个类创建对象实例。但是在 JavaScript 中,因为没有类,所以“函数构造函数”会创建对象实例。有时我也听到人们说“函数对象”。

于 2013-02-20T19:35:35.850 回答