1

文字列に onchange イベントを追加することは可能ですか?

私はこのようなものが欲しい:

var myString = '';
var doSomething = function(){
   console.log('string changed');
};

myString.on('change',doSomething);
myString = 'new'; //at this point the on('change') event should be run
4

2 に答える 2

2

いいえ、JavaScript では文字列は不変であるため、これは不可能です。

文字列を変更しているように見える文字列操作は、実際には新しい文字列を作成しています。

したがって、どうにかして にイベントをアタッチしたとしても、文字列は決して変更できないため、変更を検出String.prototypeする方法はありません。

于 2013-10-11T06:18:22.487 に答える
0

「macek」(ちなみにありがとう)の答えのため、これは正しい答えではありませんが、私にとってはうまくいく「回避策」です。たぶん、他の誰かもこれを助けます。

var events = require('events');

var myString = function(val){
   this.myVal = val;

   this.change = function(newVal)
   {
       if(newVal !== this.myVal){
           this.myVal = newVal;
           this.emit('changed');
       }
   }
   this.val = function(){
      return this.myVal;
   }

};

myString.prototype.__proto__ = events.EventEmitter.prototype;

var doSomething = function(){
    console.log('string changed');
};

var somestring = new myString('');

console.log(somestring.val()); // output ''
somestring.on('changed',doSomething);
somestring.change('new'); //output doSomething() -> 'string changed'
console.log(somestring.val()); //output 'new'
于 2013-10-11T06:55:24.567 に答える