我真的很想分解 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,您需要拥有某物的属性。如果您将本地范围的变量与 var
、let
或 const
一起使用,您将无法附加(相当于)监听器覆盖变量,因为变量本身被新引用完全替换。
作为局部变量的替代:
如果您在对象上下文中使用 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/