2016-09-14 73 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