开发者

Issues with Object.toString in IE8, backbone.js

What is up with IE8 and the toString method of Objects?

I am trying to override toString in my models in Backbone.js, but IE8 doesn't seem to recognize that the method is there. Changing the method name to something else works fine, but why can't I use toStrin开发者_JS百科g? This works in 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 code: http://jsfiddle.net/x96mR/3/


If you move the toString outside the Backbone.Model.extend to:

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

It works. I would suspect that Backbone is doing some funky stuff that doesn't work as expected in IE8

Edit (thanks to @Ferdinand Prantl):

All properties passed into the Backbone.extend are added to the model's prototype using for-in enumeration. IE < 9 has a bug where it will not copy certain properties called the 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.

constructor, toString, valueOf, toLocaleString, prototype, isPrototypeOf, propertyIsEnumerable, hasOwnProperty, length, and unique will all be skipped.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜