当变量的值改变时如何调用 JavaScript 函数?

3
通常情况下,我们在点击按钮时调用JavaScript函数。
<button onclick=function1();>Post message</button>

有时候,我们可能会在特定的时间调用JavaScript函数。
window.onload = myFunction();
          function myFunction()
           {
                 setInterval(function1,t);  
           }

其中function1()是任何JavaScript函数。我想仅在脚本中变量的值更改时调用此函数。

例如:假设我有一个变量abc。现在,当我使用下面的函数在页面上选择某些内容时,该变量的值会改变。

var abc = function getSelectionHTML() {
      var userSelection;
      if (window.getSelection) {
        // W3C Ranges
        userSelection = window.getSelection ();
        // Get the range:
        if (userSelection.getRangeAt) {
          if (userSelection.rangeCount > 0)
        var range = userSelection.getRangeAt(0);
          else
        return '';
        } else {
          var range = document.createRange ();
          range.setStart (userSelection.anchorNode, userSelection.anchorOffset);
          range.setEnd (userSelection.focusNode, userSelection.focusOffset);
        }
        // And the HTML:
        var clonedSelection = range.cloneContents ();
        var div = document.createElement ('div');

        div.appendChild (clonedSelection);
        return div.innerHTML;
      } else if (document.selection) {
        // Explorer selection, return the HTML
        try {
          userSelection = document.selection.createRange ();
          return userSelection.htmlText;
        } catch (err) {
          return '';
        }
      } else {
        return '';
      }
    }

如何仅在变量值改变时弹出alert(abc)?请帮忙!
2个回答

2
如果你的目标是“现代”浏览器,你可以使用Object.defineProperty来定义一个 setter 函数,即每次设置相应字段的值时都会调用的函数。
由于 JS 中的“全局”变量只是 window 对象的成员,因此你应该能够做出类似以下的操作。
Object.defineProperty(window, "abc", { set: function(v) { 
  /* this is run every time abc is assigned a value: 
     the value being assigned can be found in v */
} } );

2

首先,你需要使用自定义的 setters 和 getters来定义变量abc

var value_of_abc;
 Object.defineProperty(window, 'abc', {
    get: function() {
      console.log('get!');
      return value_of_abc;
    },
    set: function(value) {
      console.log('set!');
      value_of_abc = value;
    }
  });

每当您调用或更改变量abc时,下面的事情就会发生。
window.abc //get!
window.abc = 1 //set!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接