Pergunta

Tanto quanto eu sei que não é possível modificar um objeto de si mesmo desta maneira:

String.prototype.append = function(val){
    this = this + val;
}

Assim, não é possível a todos para deixar a função de cadeia modificar-se?

Foi útil?

Solução

O corda primitivos são imutáveis, eles não podem ser alteradas depois que eles são criadas.

O que significa que os personagens dentro deles não podem ser alteradas e quaisquer operações em cordas realmente criar novas strings.

Talvez você deseja implementar uma espécie de construtor corda?

function StringBuilder () {
  var values = [];

  return {
    append: function (value) {
      values.push(value);
    },
    toString: function () {
      return values.join('');
    }
  };
}

var sb1 = new StringBuilder();

sb1.append('foo');
sb1.append('bar');
console.log(sb1.toString()); // foobar

Outras dicas

Enquanto strings são imutáveis, tentando atribuir qualquer para this em qualquer classe irá lançar um erro.

Eu estive pesquisando o mesmo ... Primeiro de tudo, é claro que você não pode simplesmente fazer isso + = x, 'isto' é um objeto, você não pode usar o operador + em objetos.

Existem 'por trás da cena' métodos que são chamados - por exemplo

String.prototype.example = function(){ alert( this ); }

é realmente chamando

String.prototype.example = function(){ alert( this.valueOf() ); }

Então, o que você precisa encontrar é um valor relevante que faz o contrário - algo como this.setValue (). Exceto que não há um. O mesmo vale para o número também.

Mesmo o construído em métodos são vinculados por essa

var str = 'aaa';
str.replace( /a/, 'b' );
console.log( str ); // still 'aaa' - replace acts as static function 
str = str.replace( /a/, 'b' );
console.log( str ); // 'bbb' - assign result of method back to the object

Em alguns outros objetos que puder; por exemplo, em um Data:

Date.prototype.example = function(){
 this.setMonth( this.getMonth()+6 );
};
var a=new Date();
alert(a.getMonth());
a.example();
alert(a.getMonth());

É chato, mas lá vai

Strings são imutáveis; o que você está perguntando é como dizer: "Por que eu não posso fazer:

Number.prototype.accumulate = function (x) {
    this = this + x;
};

...? "

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top