gpt4 book ai didi

javascript - 使用 setter 和 getter

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

我真的很想分解 setter 和 getter 来理解它们。我认为如果有条件就可以使用setter:

var Temperature = {}
Temperature.closure = null
var init = {}
init.get = function() {
return this.closure
}
Object.defineProperty(Temperature, "b", init)
init = {}
init.set = function(arg) {
if (arg > -459.67) { // sanity check to make sure it's above 0 degrees Kelvin
this.closure = arg
}
}
Object.defineProperty(Temperature, "c", init)

console.log(Temperature.b); // null
Temperature.c = 32;
console.log(Temperature.b); // 32
Temperature.c = -5000
console.log(Temperature.b); // still 32

我想做的是去掉 .b 和 .c,这样我就可以说

Temperature = 32

console.log(Temperature)

最佳答案

tl;dr:你不能。

要使用 setter 和 getter,您需要拥有某物的属性。如果您将本地范围的变量与 varletconst 一起使用,您将无法附加(相当于)监听器覆盖变量,因为变量本身被新引用完全替换。

<小时/>

作为局部变量的替代:

如果您在对象上下文中使用 Temperature,您可以选择通过 this.Temperature 使用该对象的属性,而不是本地范围的变量.

<小时/>

如果您坚持使用局部变量,您可以考虑构建一个更复杂的 Temperature 对象,该对象具有用于设置值的属性,但也有一个 valueOf 方法用于转换为数字:

function Temperature(kelvin) {
this._internalValue = kelvin || 0;
}

Temperature.prototype = {
get kelvin() {...}
set kelvin(val) {...}
get celsius() {...}
set celsius(val) {...}
get farenheit() {...}
set farenheit(val) {...}
valueOf: function () {
return this._internalValue;
}
}

您仍然需要使用属性进行分配:

var temperature = new Temperature();
temperature.celsius = 0;

但是您可以直接从对象获取数值:

console.log(+temperature);
// ^ cast to a Number

关于javascript - 使用 setter 和 getter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37419930/

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