2013-11-09 19 views
13

有沒有一種方法在JavaScript中使運行時在錯誤消息中使用不同的對象表示。Javascript錯誤消息,自定義對象表示

一個典型的錯誤消息

Uncaught TypeError: Object [object Object] has no method 'toggle'

這將是有益的,如果我們能夠提供更好的表現對象比[object Object]。在其他語言中你可以把它通過覆蓋打印對象的更好的代表toString()

但是它看起來像覆蓋toString在這種情況下沒有效果。

+0

做所有的瀏覽器做或只有IE瀏覽器?在Firefox和Chrome中,我通常會收到相當不錯的錯誤消息。該行應該在那裏,所以你可以''console.log(theObject);'就在錯誤之前。 – HMR

+0

我從chrome中實際複製了錯誤消息。 –

+1

是的,這不是一個非常有用的信息。 Chrome可能會因錯誤而中斷,並且會導致錯誤。按下底部的F12,Sources標籤按鈕,看起來像一個帶有暫停圖標的停止標誌。您可以多次單擊它以:在錯誤時不會暫停,暫停未捕獲的錯誤和所有錯誤。 – HMR

回答

-3

像這樣的東西應該工作:

Object.prototype.toString = function() { 
    return '(OBJECT: ' + this.name + ')'; 
}; 

foo = { name: 'foo' }; 
bar = { name: 'bar' }; 
baz = {} 

foo.thing(); // TypeError: Object (OBJECT: foo) has no method 'thing' 
bar.thing(); // TypeError: Object (OBJECT: bar) has no method 'thing' 
baz.thing(); // TypeError: Object (OBJECT: undefined) has no method 'thing' 

(節點JS)

+5

Doenst工作.http://i.stack.imgur.com/c5QeV.png........http://jsbin.com/unonEfI/2/edit –

+0

笑,忘了測試它在瀏覽器。它適用於Node.js – olleicua

4

我會用一個try...catchthrow你自己的錯誤信息:

var obj = { 
    name: 'obj', 
    fn: function() { 
    return 'hallo'; 
    } 
} 


function hasMethod(obj, fn) { 
    try { 
     if (!obj[fn]) { 
      var err = obj.name + ' does not have a method ' + fn; 
      throw new Error(err) 
     } 
    } catch (e) { 
     console.log(e) 
    } 
} 

hasMethod(obj, 'moose'); // obj does not have a method moose 

Fiddle

+0

是的。拋出我自己的錯誤信息是一種方法。我一直在尋找,而不嘗試/捕獲的解決方案,所以它適用於在代碼的任何地方拋出的錯誤消息,那些我不要期望過高 –

+0

這是我能想到的唯一解決方案。否則,我們需要一種方法來修改'Error'類本身。 –

1

的消息依賴於瀏覽器。除了切換到chrome之外,不做任何更改,您會收到一條更好的消息,報告您正在使用的對象的類型。

1

這是Object.prototype.toString方法的一個侷限性,它似乎負責創建您在這些TypeErrors中看到的[object Object]表示法。雖然您可以覆蓋全球ObjecttoString原型,但重寫的原型不是最終被TypeError等中的本機代碼調用的原型。

Here's a bit more explanation for why that specific notation was chosen和這裏的why it can't be overridden。實際上,錯誤消息格式更多地是Javascript編譯器和/或實現的一部分,而不是Javascript本身的一部分!

0

如果你的目的是純轉換的JavaScript對象的字符串,然後

JSON.stringify(object) 

作品絕對好吃。它的文檔是here

但是我在你提到的錯誤信息中看到「切換」,我假設它是一般的JQuery toggle這是在DOM對象上執行的。在這種情況下,JSON.stringify()不起作用。

轉換DOM對象的字符串遵循this stackoverflow post

+0

如果對象有方法呢?它顯示與stringify? – everlasto

0

或許你也可以嘗試Object.toSource()(我猜它只能在Firefox)