我在javascript中有一个定义toString方法的类,但是当我想在页面中打印它时,它总是在IE中打印[object object]
(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();
有什么问题?
BTW,这是我的应用程序中的代码:
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;
屏幕截图:
答案 0 :(得分:7)
实际上上述评论不正确。虽然您可能无法覆盖元素上的默认原型方法,但您可以为自己的类型执行此操作。问题是toString不会作为代码片段中的键返回:
for (var key in o) arg[key] = o[key];
如果添加以下内容,事情将按预期工作:
if (o.toString !== Object.prototype.toString) {
arg.toString = o.toString
}
答案 1 :(得分:1)
好的,我现在看到你的问题了。
在IE的所有旧版本(9之前的版本)中,javascript引擎不允许您修改元素的原型函数。
因此对象的默认toString()
为[object Object]
对于旧版本的IE,您可能不得不考虑使用不同的代码方法。
请参阅此处的文章:http://blog.motane.lu/2007/09/20/elementprototype-in-ie/
.toString
已经 所有对象原型中的预定义函数,并且无法在IE中覆盖它。尝试使用其他函数名称。
答案 2 :(得分:0)
其实你可以!你只需将toString移到
之外Person.prototype.toString = function() { return this.name; }
进一步信息查看这篇文章