2011-07-25 71 views
6

IE8和toString對象的方法是什麼?IE8中的Object.toString問題,backbone.js

我想在我的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/

回答

9

如果移動toStringBackbone.Model.extend外:

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

它的工作原理。我會懷疑骨幹做一些時髦的東西,如IE8預期

編輯不起作用(感謝@Ferdinand Prantl):

傳遞到Backbone.extend被添加到模型的prototype所有屬性枚舉使用for-inIE < 9有一個錯誤,它不會複製一些名爲DontEnumBug的屬性。

DontEnumBug

在IE < 9,JScript的將其中 有在對象的原型鏈一個同名屬性, 具有DontEnum屬性的任何財產跳過在任何對象。

構造,的toString,的valueOf,的toLocaleString,原型,isPrototypeOf,propertyIsEnumerable,hasOwnProperty,長度和獨特的將全部被跳過。

+0

奇怪......我以爲我嘗試過,但顯然不是。謝謝! – Sam

+2

主幹通過for-in枚舉來覆蓋原型的所有屬性。 IE跳過名稱的屬性:構造函數,toString,toLocaleString,valueOf和isPrototypeOf。它被稱爲[DontEnumBug](https://developer.mozilla.org/en-US/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug)。 –