2

私はこれをやろうとしています:

String.prototype.clear = function(){
    alert(this.value);
    this = ''; // I want to set value to '' here
}

var temp = 'Hello';
temp.clear();// After this step temp should be ''

しかし、無効な左側の割り当てエラーが発生します。私はこの質問を参考として見つけましたが、それは私が本当に望んでいることではありません。また、「これ」は不変であることがわかりました。

それで、私の仕事をする方法はありますか?どこにも使っていません。ただ遊んでいます。ありがとう。

4

4 に答える 4

1

短くするには:

できません。

文字列は不変です。一度作った弦は二度と変えることはできません。

文字列を「クリア」するには、文字列を空の文字列に設定する必要があります

var str = "String";
str='';

これは文字列を変更しませんが、文字列strの新しいインスタンスに設定することに注意してください。古いものはガベージコレクションされます

まったく同じことを行う Object の Prototypes メソッドを呼び出すよりもさらに短くなります。また、ネイティブの Objects プロトタイプを調整する必要はありません


編集 - Florian Margaine を指摘してくれたThx

空の文字列を設定することが何度もあり、将来のクリアの「定義」を変更する可能性がある場合は、 `` または空の文字列を返す関数を使用できます

function clearString () {
    return ''
}
var str = "Asd"
var str = clearString()

または単に変数を空の文字列に設定します

var emptyString = ''
var str = "Asd"
str = emptyString //''

またはに変更''する場合は、nullundefined

var emptyString = null

プリミティブ データ型は参照ではなく値として渡されるため、これも同様に機能します。

しかし、このようなもののために Objects プロトタイプを変更しないことをお勧めします

于 2012-12-20T13:59:19.297 に答える
1

次のような MyMutableString というクラスを作成できます。

function MyMutableString(s) {
   this.string = s;
   this.clear = function() {
      this.string = "";
   }
}

インスタンスを作成し、次のように使用します。

var s = new MyMutableString("my str");
s.clear(); // makes string stored inside object `s` empty
console.log(s.string);
于 2012-12-20T13:47:22.843 に答える
0

このようなオブジェクトのコピーはどうですか?

String.prototype.clear = function(){
    alert(this);
    return '';
}


var temp = 'Hello';
var newTemp = temp.clear();
alert(newTemp);
于 2012-12-20T13:50:17.223 に答える
0

ラッパーを作成することは別として、最善の方法は機能的な方法を使用することです。

String.prototype.clear = function() {
    return '';
};

var t = 'hello';
t = t.clear();

なぜただやらないt = '';のですか?さて、今日クリアすることは を入れることを''意味するかもしれませんが、明日を入れることを意味するかもしれませんnull。それを変更する単一のポイントを持つことは、それだけの価値があるかもしれません. またはまったくありません。

于 2012-12-20T13:50:34.870 に答える