2013-10-11 3 views

ответ

2

Нет, это невозможно, так как строки являются неизменными в JavaScript.

Любая строка, которая выглядит так, как будто она меняет строку, фактически создает новую строку.

Таким образом, даже если вы каким-то образом прикрепить события к String.prototype, нет никакого способа не обнаруживают изменения, так как строка не может изменить

0

Из ответа «Maček» (спасибо, кстати) это не правильный ответ, но «обходной путь» работает для меня хорошо. Может, кому-то это поможет.

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' 
Смежные вопросы