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)只有当变量的值发生变化时如何?请帮忙!

4

2 回答 2

2

首先,您需要abc使用自定义 Setters 和 Getters定义变量:

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

然后,每当您调用或更改 variableabc时,就会发生这里的事情。

window.abc //get!
window.abc = 1 //set!
于 2014-10-24T02:50:37.527 回答
2

如果您的目标是“现代”浏览器,您可以使用Object.defineProperty定义一个 setter 函数,即每次设置相应字段的值时都会调用的函数。

由于 JS 中的“全局”变量只是窗口对象的成员,所以你应该能够做类似的事情

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 */
} } );
于 2012-11-17T06:40:14.797 回答