JavaScript 函数对象(Function 对象)
函数对象
当我们对函数使用 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 对象)的更多相关文章
- Javascript学习之Function对象详解
JavaScript中的Function对象,就是我们常说的函数对象.在JS中,所有的函数也是以对象的形式存在的. 语法 充当Function对象的构造函数使用,用于结合new关键字构造一个新的Fun ...
- Javascript Object、Function对象
1.Object对象 原型对象 原型是对象的一个属性,也就是prototype属性,每个对象都有这个内部属性,而且他本身也是一个对象. <script type="text/javas ...
- JavaScript对象(正则表达式,Date对象,function对象 arguments对象)
好用的技术教程:http://www.w3school.com.cn/index.html 1:正则表达式 正则表达式通常用于验证表单 定义语法为 / / 2:Date对象 var now = new ...
- javascript中的function对象
function对象都是Function的实例: > Object.getOwnPropertyNames(Function) [ 'length', 'name', 'arguments', ...
- JavaScript 函数,math对象,Date对象 序列化 总结
函数 函数定义 // 普通函数定义 function f1() { console.log("Hello world!"); } // 带参数的函数 function f2(a, ...
- JavaScript函数作用域与对象以及实用技巧
1. JS作用域 1.1 全局作用域和局部作用域 函数外面声明的就是 全局作用域 函数内是局部作用域 全局变量可以直接在函数内修改和使用 变量,使用var是声明,没有var是使用变量. 如果在函数内使 ...
- javaScript对象——function对象
1.基本对象和Function(函数)方法对象 2.概念 3.创建function对象的三种方式: 第一种不建议使用 2.3两种方式就是方法名位置不同,建议使用: 4.方法调用只要名字对,实参不一定完 ...
- Javascript高级篇-Function对象
1.引入 1.1Function是基于原型的对象 2.创建Function对象 2.1 var myFun = new Function("参数一","参数二" ...
- 随笔:JavaScript函数中的对象----arguments
关于arguments 调用函数时,如果需要传参,其实参数就是一个数组,在函数体的内置对象arguments可以访问这个数组,如: arguments[0]:第一个参数 arguments[1]:第二 ...
- JavaScript函数和window对象
一.什么是函数 函数的含义:类似于Java中的方法,是完成特定任务的代码语句块 使用更简单:不用定义属于某个类,直接使用 二.常用系统函数 parseInt ("字符串") ...
随机推荐
- “摆地摊“都找不到全栈工程师?JNPF帮你分分钟搞定!
大街上捕捉野生程序员 都这样了还找不到全栈工程师 全栈工程师(Full-Stack Engineer)图鉴: 全栈工程师,也叫全端工程师(同时具备前端和后台能力),英文Full Stack deve ...
- 在CabloyJS中将Webpack生成的文件自动上传到阿里云OSS
背景 阿里云OSS提供了一个Webpack插件,可在Webpack打包结束后将webpack生成的文件自动上传到阿里云OSS中 下面看看在CabloyJS中如何使用该插件 新建项目,并配置MySQL连 ...
- Vue数据双向绑定原理(vue2向vue3的过渡)
众所周知,Vue的两大重要概念: 数据驱动 组件系统 1 2 接下来我们浅析数据双向绑定的原理 一.vue2 1.认识defineProperty vue2中的双向绑定是基于definePropert ...
- Linux文本管理命令
touch命令: 创建空文件:touch newfile 也可以使用重定向符(>)创建空文件: > newfile 刷新文件时间: touch 已经存在的文件 cp命令:文件的复制 选项: ...
- Redis如何实现多可用区?
在如今的业务场景下,高可用性要求越来越高,核心业务跨可用区已然成为标配.腾讯云数据库高级工程师刘家文结合腾讯云数据库的内核实战经验,给大家分享Redis是如何实现多可用区,内容包含Redis主从版.集 ...
- Optional 类
@Test public void test2(){ Girl girl = new Girl(); // girl = null; //ofNullable(T t):t可以为null Option ...
- SpringBoot接口 - 如何优雅的对接口返回内容统一封装?
在以SpringBoot开发Restful接口时,统一返回方便前端进行开发和封装,以及出现时给出响应编码和信息.@pdai SpringBoot接口 - 如何优雅的对接口返回内容统一封装? RESTf ...
- Visual Studio 生产环境配置方案:SlowCheetah
原文 SlowCheetah 能满足你不同编译模式产生不同 app.config 配置的需求,已被微软纳入麾下,支持XML,JSON格式. 下面我们用XML的格式来试试如何使用SlowCheetah, ...
- shell脚本语句
条件语句 1.if语句 语法格式: if [ expression ] then 命令 elif [ expression ] then 命令 -- else 命令 fi if语句有单分支结构,双分支 ...
- 虚拟机win7系统安装
win7 x64虚拟机安装步骤 1.点击创建新虚拟机,选择典型 2.选择客户机操作系统:windows 7 x64 3.命名虚拟机 4.指定磁盘容量 5.点击完成 6.编辑此虚拟机设置 7.内存设置 ...