2016-08-23 2 views
3

Как обычные функции и функции стрелки различаются вокруг _proto_ конструкторов?

let anonymous = function() { 
 
    return 'hello' 
 
}; 
 

 
let f =() => 'world'; 
 

 
console.log(new anonymous['__proto__'].constructor()); 
 
console.log(new f['__proto__'].constructor()); 
 

 

 
console.log(anonymous());

Обе функции возвращают функции с именем является anonymous, когда я пытаюсь создать новый экземпляр.

Мой вопрос: когда я вызываю функцию anonymous(), почему она не попадает во второй конструктор (функция стрелки)?

+1

Ваш вопрос запутан и запутан. они представляют собой два разных объекта и почему бы назвать анонимный execute f()? – Mox

+0

Что вы подразумеваете под «почему он не попал во второй конструктор»? Что оно относится к? – undefined

+1

Функции стрелок не являются конструкторами. – Oriol

ответ

5

[[Прототип]] для обеих функций - Function.prototype. В этом смысле функциональные выражения и функции стрелок не различаются.

let anonymous = function() { 
 
    return 'hello' 
 
}; 
 
let f =() => 'world'; 
 
console.log(Object.getPrototypeOf(anonymous) === Function.prototype); // true 
 
console.log(Object.getPrototypeOf(f) === Function.prototype); // true

И Function.prototype.constructor, конечно Function.

Итак, вы делаете new Function(), что создает функцию, которая ничего не делает. Эта бесполезная функция называется anonymous, потому что у нее нет имени, но это не функция в переменной anonymous.

+0

Большое спасибо! Сначала я должен прочитать 'Function.prototype' :) –

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

  • Нет связанных вопросов^_^