3
我在玩toString方法,當我嘗試重寫函數的toString方法時,我可以看到效果,當我嘗試console.log時。 http://jsbin.com/bigocijuqo/1/edit?js,console。JavaScript中重寫對象的toString
function greet(){
console.log("Hello!");
}
console.log(greet);
greet.toString = function() {
return "Overridden toString";
};
console.log(greet);
產生
然而,當我試圖用的對象一樣,它似乎並沒有服用效果。 http://jsbin.com/jebunakibi/1/edit?js,console
var ray = {
'name': 'Ray',
'fav_food': 'Carrots'
};
console.log(ray);
ray.toString = function() {
return "My name is " + this.name + " and I loooove " + this.fav_food;
};
console.log(ray);
產生
[object Object] {
fav_food: "Carrots",
name: "Ray"
}
[object Object] {
fav_food: "Carrots",
name: "Ray",
toString: function() {
return "My name is " + this.name + " and I loooove " + this.fav_food;
}
}
我預計第二的console.log將打印
My name is Ray and I loooove Carrots
我甚至試圖改變toString方法在Object.prototype中,但它仍然沒有采取任何影響。有人可以解釋這段代碼有什麼問題嗎?
不過,我有點困惑,爲什麼它的功能不一樣?問候,當我說console.log(問候); toString函數被調用,返回的是我們在控制檯中看到的。 –
現在這是一個很好的問題,爲什麼它適用於函數而不是其他對象。 –
我會想象Chrome使用一些*內部*表示構造。這允許它「瀏覽」對象並保持準確的對象圖視圖,即使是在修改過的原型的情況下。其他瀏覽器如FF和IE將隱含執行一個toString,並且它們需要'console.dir'來獲得類似於Chrome的'console.log'中的行爲。開發者工具是開發者工具;行爲是實現定義的,並且怪癖/觀察到的差異應該從其他JavaScript行爲中排除。 – user2864740