gpt4 book ai didi

javascript - 当原型(prototype)设计时,是否可以将方法的结果分配给属性?

转载 作者:行者123 更新时间:2023-11-28 16:09:38 25 4
gpt4 key购买 nike

考虑以下代码:

function rectangle(x, y) {
this.width = x;
this.height = y;
this.calcArea = function() {
return (this.width * this.height);
};
}

rectangle对象有两个属性(宽度和高度)和一个方法(calcArea)。

我希望向矩形对象添加另一个属性:area 。我将通过原型(prototype)方法来完成此操作,如下所示:

rectangle.prototype.area = function () {return this.calcArea();}

现在想象一下我们创建一个新的矩形实例:var r = new rectangle(2,3);不幸的是,area是一种方法。要检索正确的值,您必须调用 r.area();

area应该(至少在语义上)是一个属性而不是一个方法,有没有办法直接分配 calcArea() 的结果到r.area属性(property)?

如果我将原型(prototype)更改为:

rectangle.prototype.area = function () {this.area = this.calcArea();}

我必须打电话r.area()一次,然后所有后续调用 r.area将是一个数字,根据需要。这还不错,但并不完美。那么有没有更好的办法呢?

最佳答案

矩形的面积是根据其他属性计算的,这些属性随矩形的变化而变化。因此,区域不属于原型(prototype),而是属于每个实例。无论如何,在原型(prototype)中拥有一个会被每个 Rectangle 实例遮盖的属性是没有意义的。不过,计算可以属于原型(prototype),因为每个矩形的计算都是相同的。

为了获得该值,您必须至少计算一次,正如您所说。您可以在 Rectangle 的构造函数中执行此计算,但最好将该方法保留在原型(prototype)中,因为它不需要重复。

function Rectangle(x, y) {
this.width = x;
this.height = y;
this.area = this.calculateArea();
}

Rectangle.prototype.calculateArea = function(){
return this.width * this.height;
}

请记住,如果您在创建矩形后更改矩形尺寸,则该值不会更新。因此,我总是按需计算它,因为它更安全,除非经常调用此属性并且性能是一个问题。

关于javascript - 当原型(prototype)设计时,是否可以将方法的结果分配给属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13455925/

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