函数对象

当我们对函数使用 typeof 操作符会返回什么?

function f() {
console.log('hello')
} console.dir(typeof f) // function

实际上函数是一种特殊的 JavaScript 对象。由于函数是对象,所以它也有属性和方法,甚至还可以使用 Function() 构造函数创建新函数对象。

函数对象属性

自有属性

属性名 作用
length 属性表示函数的参数列表中的参数个数。
name 属性表示定义函数时使用的名字,如果是未命名的函数则为匿名函数。
prototype 属性是函数对象的原型对象,每个函数都有自己的原型对象,当函数被作为构造函数使用是,新创建的对象从这个原型对象继承属性。

自定义属性

执行f.count = 0不是在函数内定义一个局部变量 count 。换句话说,函数属性和变量是毫不相关的两个东西。

函数是一种特殊的对象,可以在它里面添加属性,而且对它的执行没有任何影响。因此,可以将自定义属性缓存到函数对象中,而这个属性只有函数自己会用到。

function f() {
console.log('hello')
f.count++
}
f['count'] = 1 // 自定义函数属性
f() // 执行函数
f() // 执行函数
console.log(`调用次数: ${f.count}`) // 2

函数方法

call()

call() 和 apply() 允许为不同的对象分配和调用属于一个对象的函数,提供新的 this 值给当前调用的函数。

let o = {
print: function(date) {
console.log(`Time: ${date} | ${this.name} 说:${this.content}`)
}
} let a = {
name: 'xiaoming',
content: '今天天气真好!'
} let b = {
name: 'xiaohong',
content: '今天天气一般!'
} o.print.call(a, new Date().getHours()) // Time: 22 | xiaoming 说:今天天气真好!
o.print.call(b, new Date().getHours()) // Time: 22 | xiaohong 说:今天天气一般!

call() 和 apply() 类似于 Java 一样,子类继承父类,并调用父类方法。

bind()

bind() 方法可以把函数绑定到对象上。如果在函数 func 上调用 bind() 方法并传入对象 o ,则这个方法会返回一个新函数,这个函数就像是 func 函数一样。

function func(y) {
return this.x + y
} let o = {
x: 1
} let bindFunc = func.bind(o)
console.log(bindFunc(10)) // 11

绑定完成之后,再将这个函数作为另一个对象的属性:

let p = {
x: 10,
bindFunc
} console.log(p.bindFunc(10)) // 20

说明 bindFunc 依旧绑定的是对象 o 。

函数的构造器

函数本质是对象,而它的构造函数是 Function() ,可以用来创建函数:

const f = new Function('x', 'y', 'return x * y')

JavaScript 函数对象(Function 对象)的更多相关文章

  1. Javascript学习之Function对象详解

    JavaScript中的Function对象,就是我们常说的函数对象.在JS中,所有的函数也是以对象的形式存在的. 语法 充当Function对象的构造函数使用,用于结合new关键字构造一个新的Fun ...

  2. Javascript Object、Function对象

    1.Object对象 原型对象 原型是对象的一个属性,也就是prototype属性,每个对象都有这个内部属性,而且他本身也是一个对象. <script type="text/javas ...

  3. JavaScript对象(正则表达式,Date对象,function对象 arguments对象)

    好用的技术教程:http://www.w3school.com.cn/index.html 1:正则表达式 正则表达式通常用于验证表单 定义语法为 / / 2:Date对象 var now = new ...

  4. javascript中的function对象

    function对象都是Function的实例: > Object.getOwnPropertyNames(Function) [ 'length', 'name', 'arguments', ...

  5. JavaScript 函数,math对象,Date对象 序列化 总结

    函数 函数定义 // 普通函数定义 function f1() { console.log("Hello world!"); } // 带参数的函数 function f2(a, ...

  6. JavaScript函数作用域与对象以及实用技巧

    1. JS作用域 1.1 全局作用域和局部作用域 函数外面声明的就是 全局作用域 函数内是局部作用域 全局变量可以直接在函数内修改和使用 变量,使用var是声明,没有var是使用变量. 如果在函数内使 ...

  7. javaScript对象——function对象

    1.基本对象和Function(函数)方法对象 2.概念 3.创建function对象的三种方式: 第一种不建议使用 2.3两种方式就是方法名位置不同,建议使用: 4.方法调用只要名字对,实参不一定完 ...

  8. Javascript高级篇-Function对象

    1.引入 1.1Function是基于原型的对象 2.创建Function对象 2.1 var myFun = new Function("参数一","参数二" ...

  9. 随笔:JavaScript函数中的对象----arguments

    关于arguments 调用函数时,如果需要传参,其实参数就是一个数组,在函数体的内置对象arguments可以访问这个数组,如: arguments[0]:第一个参数 arguments[1]:第二 ...

  10. JavaScript函数和window对象

    一.什么是函数 函数的含义:类似于Java中的方法,是完成特定任务的代码语句块 使用更简单:不用定义属于某个类,直接使用 二.常用系统函数 parseInt ("字符串")     ...

随机推荐

  1. Excel导表工具-开源

    功能 支持int.float.bool.string基础类型 支持数组 支持kv 支持枚举 支持unity类型vector3,vector2,color 自动生成csharp类 单个excel中多个s ...

  2. opencv c++安装踩坑记录 file cannot create directory: /usr/local/include/opencv2. Maybe need administrative privileges

    前言 最近深度学习Ultra-Fast-Lane-Detection/INSTALL.md at master · cfzd/Ultra-Fast-Lane-Detection (github.com ...

  3. redis客户端打不开 提示cannot connect to server dev.check log for details

    我当前状况是redis客户端打不开,之前一直好好的(虽然作为一个程序员我不配说这句话,哈哈),但是我排查了我觉得所有的可能性,我用的阿里云的redis(还没有到购买到期时间),然后我就关闭了防火墙,你 ...

  4. django框架10

    内容概要 ajax结合sweetalert forms组件钩子函数 forms组件字段参数 forms组件字段类型 forms组件源码分析 cookie与session简介 django操作cooki ...

  5. Cent OS8.0 及以上版本安装禅道教程

    Cent OS8系统下安装禅道需要搭建环境如下:httpd ,mariadb , php7.2 再运行禅道 一,环境说明: 运行环境推荐使用 Apache + PHP(7.0/7.1/7.2版本) + ...

  6. vue封装手机验证码

    // 获取验证码 let endMsRes = new Date().getTime() + 45000; localStorage.setItem("myEndTime", JS ...

  7. Linux shell脚本基础

    程序的组成: 程序:算法+数据结构 数据:程序处理的目标 数据结构:相互之间存在一种或多种特定关系的数据元素的集合 算法:处理数据的方式 编程风格: 面向对象:把所有的操作都转化为对象的方式. 面向过 ...

  8. 用WindowsAppSDK(WASDK)优雅的开发上位机应用

    C#开发上位机应用的一些选择 如果你不想看介绍,可以直接跳到优雅开发示例那里. 1. WASDK(WinUI 3) Windows 应用 SDK 是一组新的开发人员组件和工具,它们代表着 Window ...

  9. python小题目练习(五)

    题目:Python实现快速排序 代码实现: """Author:mllContent:Python实现快速排序Date:2020-11-05""&qu ...

  10. 广西省行政村边界shp数据/广西省乡镇边界/广西省土地利用分类数据/广西省气象数据/降雨量分布数据/太阳辐射数据

    ​  数据下载链接:数据下载链接 广西壮族自治区,地处中国南部,北回归线横贯中部,属亚热带季风气候区.南北以贺州--东兰一线为界,此界以北属中亚热带季风气候区,以南属南亚热带季风气候区. 数据范围:全 ...