gpt4 book ai didi

javascript - 使用 Javascript 时如何更新闭包中保留的值?

转载 作者:行者123 更新时间:2023-12-03 04:50:49 24 4
gpt4 key购买 nike

这可能是一个非常基本的问题,但我对 Javascript 很陌生,我什至不知道应该搜索哪个关键字才能找到这个问题。如果这个问题已经被问过,我很抱歉,请告诉我它是什么问题。

我读到 getter 和 setter 不能在原型(prototype)中声明,所以我尝试测试如果我在原型(prototype)中声明 getter 和 setter 会发生什么。但我遇到了另一个问题。

这是一段简单的代码,声明了一个构造函数来创建对象“矩形”,它包括 getter 和 setter。

但是当我运行此代码时,尽管我使用 setWidth() 将宽度值更改为 10,但运行 getArea() 的结果是“35”;我检查了控制台上的宽度值,但它说你的宽度已更改为 10。

所以我猜这与闭包有关, getArea() 在声明时加载宽度和高度,并且尚未更新为我设置的值。

1) 当我通过setter改变高度和宽度的值时,如何更新getArea()中的值? (如何使用更新值的函数来计算面积?当然我还是想封装它。所以宽度和高度不会是this.width和this.height)

2)如果我对关闭的直觉是错误的,为什么 getArea() 总是把 35 吐在我脸上?

3)我想首先尝试的是,为什么我不能在原型(prototype)中声明 getter 和 setter?

function Rectangle(w, h) {
var width = w;
var height = h;

this.getWidth = function() {
return w;
};
this.getHeight = function() {
return h;
};
this.setWidth = function(w) {
if (w < 0) {
throw 'width cannot be under 0';
} else {
console.log('width = w');
width = w;
console.log('I put : ' + w);
console.log('width = ' + width);
}
};

this.setHeight = function(h) {
if (h < 0) {
throw 'height cannot be under 0';
} else {
console.log('height = h');
height = h;
}
};
}
Rectangle.prototype.getArea = function() {
return this.getWidth() * this.getHeight();
};

var rectangle = new Rectangle(5, 7);
rectangle.setWidth(10);

alert('AREA : ' + rectangle.getArea());

最佳答案

您必须返回“宽度”而不是“w”。在这里我改变了你的代码检查一下,

       this.getWidth = function () {
return width;
};
this.getHeight = function () {
return height;
};

  function Rectangle(w, h) {
var width = w;
var height = h;

this.getWidth = function () {
return width;
};
this.getHeight = function () {
return height;
};
this.setWidth = function (w) {
if (w < 0) {
throw 'width cannot be under 0';
} else {
console.log('width = w');
width = w;
console.log('I put : ' + w);
console.log('width = ' + width);
}
};

this.setHeight = function (h) {
if (h < 0) {
throw 'height cannot be under 0';
} else {
console.log('height = h');
height = h;
}
};
}
Rectangle.prototype.getArea = function () {
return this.getWidth() * this.getHeight();
};

var rectangle = new Rectangle(5, 7);
rectangle.setWidth(10);

alert('AREA : ' + rectangle.getArea());

关于javascript - 使用 Javascript 时如何更新闭包中保留的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42663971/

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