2016-09-14 68 views
0

可能是因爲我誤解了原型鏈,但有人可以向我解釋使這個斷言成立的原型結構嗎?控制檯原型的結構

console.log.prototype === console.prototype 

我希望它是這樣的

console.prototype.log = function(){...} 

所以log具有基本功能的原型。這個原型如何解決他的原型?

我嘗試了一些我不希望工作的東西,但他們工作。例如,而不是這樣做的:

var binded = console.log.bind(console,'something'); 

我能做到這一點

var otherBind = console.log.bind(console.log,'something else') 
+0

您正在查找Object.getPrototypeOf(console)=== Object.getPrototypeOf(console.log)',它是假的(前者是'Console.prototype',後者是'Function.prototype') – Bergi

+0

我不明白這個問題是如何與鏈接的問題重複的。當然,我們可以考慮另一個問題包含這個,因爲它更一般,但他們甚至不接近重複 – Danielo515

+0

你想知道關於原型鏈的結構,但使用'.prototype'而不是'Object.getPrototypeOf '(或不贊成的'__proto__')。重複解決了你對此的困惑,不是嗎? – Bergi

回答

3

無論console.log也不console是類的構造函數,所以他們prototype性能undefined。由於undefined === undefinedconsole.log.prototype === console.prototypetrue

退房Reflect.getPrototypeOf(),這可能是你在找什麼。

console.log.bind(console.log)表示該方法將被調用console.log作爲this的值。調用綁定函數在Chrome和Node.js上正常工作,但在Firefox上失敗(TypeError: 'log' called on an object that does not implement interface Console.)。請參閱console.log() called on object other than console behaves differently among different browsers

+0

但是,我怎麼可能將控制檯日誌綁定到自己?這可能是一個循環引用或什麼? – Danielo515

+0

你好@Gothdo。這很奇怪。我試着將console.log作爲回調參數傳遞數百次,並且總是失敗,因爲缺少正確的'this'上下文,所以我不得不將它綁定到控制檯。有沒有這種情況是真的嗎?感謝和問候 – Danielo515

+0

謝謝@Gothdo!很高興看到你如何開啓一個新問題並在一小時內回答它:D也許你想通過鏈接指向另一個答案來編輯你的答案,並且將其標記爲已接受? – Danielo515