【发布时间】:2011-03-03 12:51:08
【问题描述】:
在 Javascript 中定义类的一种方法是使用闭包和对象字面量。例如,考虑一个圆圈:
var circle = function(radius) {
var radius = radius;
return {
area: function() {
return Math.PI*(radius*radius);
}
}
}
然后可以使用保持封装的内部变量来实例化圆对象:
c = circle(1);
c.area(); // Returns pi
c.radius; // Returns undefined
不幸的是,使用这种方法,如果我要创建多个圆,则会为每个实例复制 area 函数。这是通常使用原型的地方:
var Circle = function(radius) {
this.radius = radius;
}
Circle.prototype.area = function() {
return Math.PI*(this.radius*this.radius);
};
现在的问题是不能将变量声明为私有的:
c = new Circle(1);
c.area(); // Returns pi
c.radius; // Returns 1
有谁知道我将如何充分利用两者?效率是一个问题,所以宁愿避免第一种方法的当前公式,我正在为公共 API 编写,所以不希望用户访问内部变量/方法。提前谢谢...
【问题讨论】:
标签: javascript prototype closures