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- 如果
strict = true</

本文详细介绍了ECMAScript 262中的函数对象Function,包括直接调用Function构造器的过程,构造函数的属性如Function.prototype和Function.length,以及原型对象的属性和方法如toString()、apply()、call()和bind()。同时,还探讨了函数实例的length和prototype属性,解析了函数实例属性的内部实现和工作原理。
最低0.47元/天 解锁文章
145

被折叠的 条评论
为什么被折叠?



