我在看Typescript Ecmascript的源代码,我看到了这个:
interface FunctionConstructor {
/**
* Creates a new function.
* @param args A list of arguments the function accepts.
*/
new(...args: string[]): Function;
(...args: string[]): Function;
readonly prototype: Function;
}
declare var Function: FunctionConstructor;
我假设FunctionConstructor是Function的构造函数的类型。
我们声明了一个Function变量,它有FunctionConstructor接口。FunctionConstructor接口的前两个参数是什么?为什么变量Function(一个从Object派生的普通JavaScript对象)的类型与它的构造函数相似?
基本上我正在努力了解幕后发生的事情。任何帮助都是感激的。谢谢!
1条答案
按热度按时间5us2dqdw1#
首先参见Function() constructor
Function()构造函数创建了一个新的Function对象。直接调用构造函数可以动态创建函数,但会遇到与eval()类似的安全性和性能问题(但远没有eval()那么重要)。然而,与eval(可以访问局部作用域)不同,Function构造函数创建的函数只能在全局作用域中执行。
换句话说:动态创建函数是一个高级特性。2如果可能,使用常规函数。
话虽如此:
记住变量和类型使用不同的命名空间。
此代码法律的
因此,
var Function: FunctionConstructor
是可用于产生Function
对象的对象。接口
FunctionConstructor
对如何使用Function
对象进行建模:new
创建函数new
的函数prototype: Function
是JS中原型继承的标志,通过Function
对象创建的对象将其__proto__
设置为Function
类型的对象,从而可以使用该类型的方法(可以调用etc)。