2016-11-05 3 views
11

В браузере (хром, по крайней мере) функции являются экземплярами FunctionЧто такое конструктор функций в Node.js?

setTimeout instanceof Function 
// true 

Однако в узле, они не являются

setTimeout instanceof Function 
// false 

Так что конструктор setTimeout «s, если не Function?

+0

Конструктор ** есть ** функция. Попробуйте 'typeof setTimeout.constructor' – undefined

+0

Я знаю его * функцию *, я спрашиваю, какую функцию –

+0

Использование версии узла 6.5.0, 'Function.prototype.check = true; console.log (setTimeout.check); ' prints true for me – Sergeon

ответ

3

Кажется, что конструктор Function, но один из другого царства.

Если запустить этот код

console.log(Object.getOwnPropertyNames(setTimeout.constructor.prototype)); 

вы получите массив с типичными Function.prototype методами, как call, apply и bind.

Так что я предполагаю, что это несколько аналогично тому, что происходит в веб-браузерах, когда вы занимаете setTimeout из фрейма:

var iframe = document.createElement('iframe'); 
document.body.appendChild(iframe); 
var win = iframe.contentWindow; 
console.log(win.setTimeout instanceof Function);  // false 
console.log(win.setTimeout instanceof win.Function); // true 
+0

Не знаю, почему они это делают. – Oriol

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