toString funktioniert nicht im IE
Habe ich eine Klasse in javascript definieren, die die toString-Methode,jedoch wenn ich drucken möchte, ihn in der Seite,es ist immer drucken [object object]
im IE(6-8).
Aber es funktioniert im firefox oder chrome(alle drucken 'kk' im Beispiel unten).
Ich Frage mich, warum?
Dies ist der Beispiel-code:
function Person(name){
this.name=name;
}
Person.prototype.toString=function(){
return this.name;
}
var p=new Person('kk');
document.getElementById('dis').innerHTML=p.toString();
Was ist das problem?
BTW,dies ist der code in meiner Anwendung:
function inherit(pro) {
function F() {};
F.prototype = pro;
return new F();
}
var Class = function() {
var clazz = null,
pros = {}; //root of chain
for (var i = 0; i < arguments.length; i++) {
var arg = arguments[i];
if (typeof arg === "function") {
arg = arg.prototype;
} else {
if (arg.init) {
clazz = arg.init;
delete arg.init;
}
var o = arg;
arg = (function() {
function F() {};
F.prototype = pros;
return new F;
})();
for (var key in o) arg[key] = o[key];
}
pros = arg;
}
clazz.prototype = pros;
return clazz;
};
var Person = Class({
init: function(name) {
this.name = name;
},
toString: function() {
return this.name;
}
});
function init() {
var p = new Person('kk');
document.getElementById('dis').innerHTML = p.toString();
}
window.onload = init;
Screenshot:
- Was meinst du mit
it works
? Was tut es in FF und Chrome? - Die Letzte Zeile in Ihrem code, wo es heißt
window.onload = init();
ist nicht korrekt/nicht, was Sie erwarten, es zu tun. Dies würde die Ausführung derinit
Funktion sofort, nicht wenn das Fenster laden. Entfernen der()
Klammern richtig wäre. - Gut,aber das Ergebnis nicht ändern.
- Habe gerade versucht das Letzte Stück code. Es funktioniert im IE9, aber es zeigt [object object] in IEtester für den IE8 und unter obwohl. Die Beurteilung durch die screenshot-ich glaube, er ist mit IE8.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ok, ich sehe dein Problem jetzt.
In alle ältere version des IE (Vorjahr 9) die javascript-engine wird nicht lassen ändern Sie ein element der Prototyp der Funktionen.
Also die Standard -
toString()
eines Objekts ist[object Object]
Haben Sie vielleicht zu denken, der einen anderen Ansatz, um Ihre code für ältere Versionen von IE.
Siehe Artikel hier: http://blog.motane.lu/2007/09/20/elementprototype-in-ie/
Letzte Antwort von Kommentaren unten:
.toString
ist bereits eine vordefinierte Funktion in den Prototyp alle Objekte, und es kann nicht überschrieben werden, auch im IE. Versuchen Sie es mit einem anderen Funktionsnamen.Eigentlich die Kommentare oben sind nicht korrekt. Obwohl Sie möglicherweise nicht in der Lage sein, um Standardwert außer Kraft setzen Prototyp-Methoden auf die Elemente, die Sie tun KÖNNEN, es für Ihre eigenen Typen. Das problem ist, dass die toString-Methode nicht zurück, wie eine Schlüssel in den code-snippet:
wenn Sie fügen Sie die folgenden Dinge funktionieren wie erwartet:
Tatsächlich, Sie können! Man muss nur bewegen Sie die toString außerhalb
Weitere Infos schauen Sie in diesem anderen post
Probleme mit Objekt.toString in IE8 backbone.js