文字列に 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
文字列に 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
いいえ、JavaScript では文字列は不変であるため、これは不可能です。
文字列を変更しているように見える文字列操作は、実際には新しい文字列を作成しています。
したがって、どうにかして にイベントをアタッチしたとしても、文字列は決して変更できないため、変更を検出String.prototype
する方法はありません。
「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'