2016-09-14 4 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 === undefined, console.log.prototype === console.prototype - true.

Отъезд Reflect.getPrototypeOf(), это может быть то, что вы ищете.

console.log.bind(console.log) означает, что этот метод будет называться с console.log как this значение. Вызов функции bound отлично работает в 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 как аргумент обратного вызова сотни раз, и он всегда терпел неудачу из-за отсутствия правильного «этого» контекста, поэтому я был вынужден связать его с консолью. Есть ли сценарий, где это верно? Спасибо и приветствую – Danielo515

+0

Спасибо @ Gothdo !! Приятно видеть, как вы открыли новый вопрос и ответили ему в течение часа: D Возможно, вы хотите отредактировать свой ответ со ссылкой на другой, и я отмечу его как принятый? – Danielo515

Смежные вопросы