1 回答
TA贡献1829条经验 获得超4个赞
更新:提供更好的解决方案。在上一个中,没有隐藏,您可以直接访问它(读/写)。这可能不是最好的主意,所以这里有一个更好的方法:__globalVar
(function () {
let privateValue = "Hello";
Object.defineProperty(window, "whatever", {
get: function () {
console.log("in getter");
return privateValue;
},
set: function (val) {
console.log("in setter");
if (typeof val === "string" && val.startsWith("https://")) {
privateValue = val;
} else {
throw "Invalid whatever";
}
},
});
})();
console.log(window.whatever);
window.whatever = "https://stackoverflow.com";
console.log(window.whatever);
window.whatever = "lalala123";
console.log(window.whatever);
现在实际上是私有的。privateValue
像这样的东西对你有用吗?我认为它的行为就像你描述的那样。
let __globalVar = 'Hello';
Object.defineProperty(window, 'whatever', {
get() {
console.log('in getter');
return __globalVar;
},
set(val) {
// put your logic here
console.log('in setter');
if( val.startsWith("https://") ) {
__globalVar = val;
} else {
throw "Invalid whatever"
}
}
})
console.log(window.whatever);
window.whatever = "https://google.com";
console.log(window.whatever);
window.whatever = "lalala123";
console.log(window.whatever);
添加回答
举报
