亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何創建一個變量,該變量只有在要分配給它的新值滿足javascript中的預定義條件時才能更改其值?

如何創建一個變量,該變量只有在要分配給它的新值滿足javascript中的預定義條件時才能更改其值?

心有法竹 2022-09-29 16:55:52
圖像您有一個名為 的全局變量。如果要存儲在其中的新值不符合某些條件,是否可以阻止任何人更改其類型和值?window.whatever例如,如果我的變量不以“https://”開頭,我不希望更改它。在這種情況下,會拋出一個錯誤,但工作正常。window.whatever = "Hello"window.whatever = 15window.whatever = "https://example.com/"也許會解決它,但我不知道如何。Object.definePropertyObject.defineProperty(window, 'whatever', {  writable: true, //here I want to add a sort of condition});我試過這個:Object.defineProperty(window,'whatever',{    set:function(x){        if (x.startsWith('https://')) this.whatever= x}})但是當我這樣做時,它說:它仍然是未定義的window.whatever = "https://example.com"Uncaught RangeError: Maximum call stack size exceeded
查看完整描述

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);


查看完整回答
反對 回復 2022-09-29
  • 1 回答
  • 0 關注
  • 112 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號