在JavaScript中你可以用许多不同的方式做同样的事情.
考虑一下例子:
1:
function Circle(radius) {
return {
"r" : radius,
"area" : function(){
return Circle.pi * this.r * this.r;
}
}
}
Circle.pi = 3.14159;
var a = Circle(10);
alert(a.area());
Run Code Online (Sandbox Code Playgroud)
2:
function Circle(radius) {
this.r = radius;
}
Circle.pi = 3.14159;
Circle.prototype.area = function(){
return Circle.pi * this.r * this.r;
}
var a = new Circle(10);
alert(a.area());
Run Code Online (Sandbox Code Playgroud)
第二个比第一个好,因为我们没有为Circle的任何实例定义相同的功能区域.
但让我们考虑3:
function Circle(radius) {
return {
"r" : radius,
"area" : Circle.area
}
}
Circle.pi = 3.14159;
Circle.area = function(){
return Circle.pi * this.r * this.r;
}
var a = Circle(10);
alert(a.area());
Run Code Online (Sandbox Code Playgroud)
有没有理由更喜欢第二种风格而不是第三种?或者我误解了一些东西?
我肯定会选择示例 2。示例 1 或示例 3 都没有充分利用 JavaScript 的面向对象功能,因为:
this,您将丢失该类的标识,即您不能再进行类似的检查a instanceof Circle。| 归档时间: |
|
| 查看次数: |
1417 次 |
| 最近记录: |