hgu*_*ser 4 javascript internet-explorer tostring
我在javascript中有一个定义toString方法的类,但是当我想在页面中打印它时,它总是[object object]在IE中打印(6-8).
但它适用于firefox或chrome(它们都在下面的例子中打印'kk').
我想知道为什么?
这是示例代码:
function Person(name){
this.name=name;
}
Person.prototype.toString=function(){
return this.name;
}
var p=new Person('kk');
document.getElementById('dis').innerHTML=p.toString();
Run Code Online (Sandbox Code Playgroud)
问题是什么?
顺便说一句,这是我的应用程序中的代码:
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;
Run Code Online (Sandbox Code Playgroud)
截屏:


小智 7
实际上上面的评论是不正确的.虽然您可能无法覆盖元素上的默认原型方法,但您可以为自己的类型执行此操作.问题是toString不会作为代码片段中的键返回:
for (var key in o) arg[key] = o[key];
Run Code Online (Sandbox Code Playgroud)
如果你添加以下内容,事情将按预期工作:
if (o.toString !== Object.prototype.toString) {
arg.toString = o.toString
}
Run Code Online (Sandbox Code Playgroud)