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);
添加回答
舉報