请参阅这个带有原型区域方法的简单圆类的示例:
var Circle = function(radius) {
this.radius = radius;
}
Circle.prototype.area = function() {
return Math.PI*this.radius*this.radius;
}
上面声明的区域函数和它首先被声明为Circle的公共方法之间的区别是什么?无论哪种方式,圆圈的个别实例都有自己的区域,不是吗?有什么区别??
this.area = function(){return Math.PI*this.radius*this.radius;}
答案 0 :(得分:3)
this.area = function(){}
创建新函数并将其分配给area
的{{1}}属性。 this
创建一个函数,并将其分配给Circle.prototype.area = function(){}
构造函数创建的prototype
个对象。
答案 1 :(得分:3)
如果在构造函数中声明它,则Circle
的每个实例都将具有该函数的单独副本。这只会浪费资源,因为所有Circle
个对象都可以共享相同的代码。
答案 2 :(得分:1)
this
指向函数对象的实例,.prototype
“指向”创建实例的函数构造函数(只有一个)。通常在经典继承中,类创建对象实例。但是在JavaScript中,因为没有类,“函数构造函数”会创建对象实例。有时候我会听到人们说“功能对象”。