gpt4 book ai didi

javascript - JavaScript 中的原型(prototype)

转载 作者:数据小太阳 更新时间:2023-10-29 06:08:53 26 4
gpt4 key购买 nike

在 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());

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());

第二个比第一个好,因为我们没有为 Circle 的任何实例定义相同的函数 area

但是让我们考虑一下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());

有什么理由更喜欢第二种风格而不是第三种风格吗?还是我误解了什么?

最佳答案

我肯定会选择示例 2。示例 1 或 3 都没有很好地利用 JavaScript 的面向对象特性,因为:

  1. 您在每个实例中复制方法定义。
  2. 通过返回一个新对象而不是使用 this,您将失去类的身份,即您不能再像 a instanceof Circle 那样进行检查。
  3. 您放弃了继承的可能性,因为您不使用原型(prototype)。

关于javascript - JavaScript 中的原型(prototype),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3592337/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com