Ich habe das gleiche erforscht ... Vor allem natürlich können Sie nicht einfach tun dies + = x, "das" ist ein Objekt, Sie können nicht den + Operator für Objekte verwenden.
Es gibt ‚hinter den Kulissen‘ Methoden, die aufgerufen werden - zum Beispiel
String.prototype.example = function(){ alert(this); }
tatsächlich rufe
String.prototype.example = function(){ alert(this.valueOf()); }
Also, was Sie finden müssen ein relevanter Wert ist, die das Gegenteil tut - etwas wie this.setValue(). Außer dass es keinen gibt. Das Gleiche gilt auch für Nummer.
Auch in Methoden der eingebauten sind, dass Sie können
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
Auf einigen anderen Objekten gebunden; zum Beispiel auf einem Date:
Date.prototype.example = function(){
this.setMonth(this.getMonth()+6);
};
var a=new Date();
alert(a.getMonth());
a.example();
alert(a.getMonth());
Es ist ärgerlich, aber es gehen Sie
Nein, ich bin Prototypen und Check-out einige Dinge auf Erbschaft und Schließungen in JS zu erforschen. Interessantes Zeug und ich hatte ein vages Gefühl, dass ein String tatsächlich unveränderlich war. Es schien nur ein wenig unlogisch, dass Array.pop tatsächlich sich selbst ändern konnte (oder der interne Hash der Werte), aber String konnte sich nicht selbst modifizieren. Stringing eines der fünf Primitive in JS erklärt viel! – ChrisR
Es erscheint ziemlich unintuitiv, eine API zu haben, bei der die Variable sb1 keine Instanz eines StringBuilders nach 'var sb1 = new StringBuilder()' ist. Warum nicht {append: ...} StringBuilder.prototype zuweisen und 'var values = []' in 'this.values = []' ändern? Ist das nur, um zu verhindern, dass Werte in append/toString mit 'this. 'versehen werden oder gibt es etwas, das ich hier nicht in Betracht ziehe? – ledneb