Table of Contents
- 直接调用
Function()
- Function 的构造器对象(The Function Constructor)
- 构造函数的属性(Properties of The Function Constructor)
- 原型对象的属性(Properties of the Function Prototype Object)
- Function.prototype.constructor
- Function.prototype.toString()
- Function.prototype.apply(thisArg, argArray)
- [Function.prototype.call(thisArg[, arg1[, arg2, …]])](#org76d3c4b)
- [Function.prototype.bind(thisArg[, arg1[, arg2, …]])](#orgf50c28f)
- 函数实例属性(Properties of Function Instances)
- 总结
直接调用 Function()
直接调用构造函数相当于 new Function(...)
Function(p1, p2, ..., pn, body)
- 首先创建一个
Function
对象fn = new Function()
- 然后将参数传入到
fn
调用fn(p1, p2, ..., body)
Function 的构造器对象(The Function Constructor)
new Function(p1, ..., pn, body)
执行过程
文字描述
argCount = arguments.length
记录参数长度P = ''
新变量用空串初始化- 如果
argCount = 0
, 设置body = ''
- 如果
argCount = 1
, 设置body = arguments[1]
, 即只有一个参数时,第一个参数
即保存这函数执行体 - 否则,如果
argCount > 1
firstArg = arguments[0]
保存第一个参数P = ToString(firstArg)
k = 2
- 进入循环, 条件:
while k < argCount
, 此步将所有参数用逗号分隔组合成字符
串
nextArg = arguments[k]
P = concat(P, ToString(nextArg))
即将第一个参数和后面的参数用逗号连
接成字符串k++
body = arguments[k]
body = ToString(body)
parse(P, FormalParameterList)
判断P
是不是可以作为参数列表来解析,
不能则抛出SyntaxError
异常parse(body, FunctionBody)
判断body
是不是可以作为函数体来解析,不能则
抛出SyntaxError
异常parse(body, StrictMode)
判断函数体是否是严格模式代码,结果保存到strict
= true/false- 如果
s