javascript – IE8中的Object.toString问题,backbone.js

前端之家收集整理的这篇文章主要介绍了javascript – IE8中的Object.toString问题,backbone.js前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
什么是IE8和对象的toString方法

我试图在我的Backbone.js模型中覆盖toString,但IE8似乎没有认识到该方法存在.将方法名称更改为其他名称可以正常工作,但为什么我不能使用toString?这适用于Chrome.

var Foo = Backbone.Model.extend({
    toString: function(){ return this.get("name"); },description: function(){ return this.get("name"); }
});

var f = new Foo({name: "a foo"});

document.writeln(f.toString());    // "[object Object]",should be "a foo"
document.writeln("<br/>");
document.writeln(f.description()); // "a foo"

JSFiddle代码http://jsfiddle.net/x96mR/3/

解决方法

如果将Backbone.Model.extend外部的toString移动到:

Foo.prototype.toString = function(){return this.get(“name”); };

有用.我怀疑Backbone正在做一些在IE8中无法正常工作的时髦东西

编辑(感谢@Ferdinand Prantl):

传递到Backbone.extend的所有属性都使用for-in枚举添加到模型的原型中. IE< 9有一个错误,它不会复制称为DontEnumBug的某些属性. DontEnumBug

In IE < 9,JScript will skip over any property in any object where
there is a same-named property in the object’s prototype chain that
has the DontEnum attribute.

构造函数,toString,valueOf,toLocaleString,prototype,isPrototypeOf,propertyIsEnumerable,hasOwnProperty,length和unique都将被跳过.

猜你在找的JavaScript相关文章