2014-03-06 41 views
1

在Ruby中,我們有#inspect,如果被覆蓋會將p函數的輸出從#<Vector:0x00000000b5e2a8>更改爲自定義字符串。從console.log()中自定義文本

在Javascript中,使用console.log()時默認的對象到字符串的轉換通常在Chrome中非常好(它是可點擊的,語法高亮的JSON),但在某些情況下它不太方便。有沒有辦法以類似於Ruby的#inspect的方式更改文本表示?

例如,我想這

Vector {x: 0, y: 0, add: function, subtract: function, ...} 

簡單Vector(0, 0)轉換。

+0

您可以覆蓋'toString'方法,那麼'的console.log(obj.toString())'。 –

+0

您可能想閱讀[Chrome DevTools文檔](https://developers.google.com/chrome-developer-tools/docs/console)關於使用控制檯的信息。 – Jonathan

+0

@RocketHazmat這似乎是我能得到的最接近的。上述兩種方法都需要修改'console.log()'調用。 – Vortico

回答

1

你可以添加自定義toString方法:

Vector.prototype.toString = function(){ return 'Vector('+this.x+','+this.y+')'; }; 
console.log(vector+''); 

或者你可以使用自定義日誌功能:

function log(vector){ console.log('Vector('+vector.x+','+vector.y+')'); } 
log(vector); 
0

在Chrome中,你可以嘗試console.dirxml()。對於HTML元素,它會打印一個可擴展的樹結構,但對於常規的JavaScript對象,它會從屬性中創建一個字符串。例如:

var testObj = { test: 'value', 'test 2': 'abc' }; 

console.dirxml(testObj); 

生產:

Object {test: "value", test 2: "abc"} 

另外一個建議是要包裝你的對象在JSON.stringify調用,如:

console.log(JSON.stringify(testObj, null, 4)); 

主要生產:

{ 
    "test": "value", 
    "test 2": "abc" 
} 

或下降t他第二個和第三個參數stringify,這將使你:

{"test":"value","test 2":"abc"}