_proto_构造函数的正常函数和箭头函数有何不同?

时间:2016-08-23 02:52:29

标签: javascript constructor arrow-functions

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 个答案:

答案 0 :(得分:5)

两个函数的[[Prototype]]是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变量中的函数。