toString在IE中不起作用

时间:2012-02-27 13:54:42

标签: javascript internet-explorer tostring

我在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;

屏幕截图:

IE

Firefox

3 个答案:

答案 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; }

进一步信息查看这篇文章

Issues with Object.toString in IE8, backbone.js