2016-08-23 63 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

你的问题令人费解和困惑。他们是2个不同的对象,为什么会调用匿名执行f()? – Mox

+0

你是什么意思,“为什么它没有撞到第二个构造函数”? “它”指的是什么? – undefined

+1

箭头函数不是构造函数。 – Oriol

回答

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变量中的功能。

+0

非常感谢!我应该先阅读'Function.prototype' :) –