第123篇: JS函数属性与方法

js,函数,属性,方法 · 浏览次数 : 42

小编点评

**JS高级程序设计第十章“函数”学习笔记  ECMAScript 中的函数是对象,因此有属性和方法。** **1.函数属性** 每个函数都有两个属性: * `length`: 保存函数定义的命名参数的个数 * `prototype`: toString()、valueOf()等方法实际上都保存在 prototype 上,进而有所有实例共享 **2.函数方法** **2.1.apply()方法和call()方法** * `apply()`方法和 `call()`方法通过 `apply()` 方法,您能够编写用于不同对象的方法。 **示例:** ```javascript console.log(getSum(1, 2)); function sum(a, b) { return a + b; } function getSum(a, b) { return sum.apply(this, arguments); } ``` **2.2.bind()方法** `bind()`方法会创建一个新的函数实例, 其 `this` 值会被绑定到传给 bind()的对象。 **示例:** ```javascript var object_1 = { color: 'blue' }; function sayColor() { console.log(this.color); } let objectSayColor = sayColor.bind(object_1); objectSayColor(); // blue ``` **总结** * 函数是对象,拥有属性和方法。 * 函数属性 `length` 和 `prototype` 用于存储函数信息。 * `apply()` 和 `call()` 方法用于执行函数,并允许您使用 `this` 设置函数的作用域。 * `bind()` 方法用于创建新的函数实例,并通过 `this` 设置其作用域。

正文

好家伙,本篇为《JS高级程序设计》第十章“函数”学习笔记

 

 

ECMAScript 中的函数是对象,因此有属性和方法。

1.函数属性

每个函数都有两个属性:length 和 prototype。

 

length属性: 保存函数定义的命名参数的个数

 

prototype: toString()、valueOf()等方法实际上都保存在 prototype 上,进而有所有实例共享

 

 

2.函数方法

2.1.apply()方法和call()方法

通过 apply() 方法,您能够编写用于不同对象的方法。

(在一个对象中调用另一个对象的方法)

function sum(a, b) {
    return a + b;
}

function getSum(a, b) {
    return sum.apply(this, arguments);
}

console.log(getSum(1, 2));

 

call()方法和apply()方法不同的地方在于

(1) apply() 方法接受数组形式的参数

(2) call() 方法分别接受参数。

示例如下:

function sum(a, b) {
    return a + b;
}

function getSum(a, b) {
    return sum.call(this, a, b);
}

console.log(getSum(1, 2));

 

 

 

这时候有人会问了,那我直接调用不就好了,为什么要用apply()和call()

我们可以用参数this去设置任意函数的作用域

window.color = 'red'; 
let o = { 
 color: 'blue' 
}; 
function sayColor() { 
 console.log(this.color); 
} 
sayColor(); // red 
sayColor.call(this); // red 此处this指向window
sayColor.call(window); // red 
sayColor.call(o); // blue 

 

 

 

所以,大概出来使用apply()方法和call()方法的好处了

使用 call()或 apply()的好处是可以将任意对象设置为任意函数的作用域

 

 

2.2.bind()

bind()方法会创建一个新的函数实例, 其 this 值会被绑定到传给 bind()的对象。

window.color = 'red';
var object_1 = {
    color: 'blue'
};

function sayColor() {
    console.log(this.color);
}
let objectSayColor = sayColor.bind(object_1);

objectSayColor(); // blue 

objectSayColor = sayColor.bind(window);

sayColor();

objectSayColor();

 

 

与第123篇: JS函数属性与方法相似的内容:

第123篇: JS函数属性与方法

好家伙,本篇为《JS高级程序设计》第十章“函数”学习笔记 ECMAScript 中的函数是对象,因此有属性和方法。 1.函数属性 每个函数都有两个属性:length 和 prototype。 length属性: 保存函数定义的命名参数的个数 prototype: toString()、valueOf

.NET周刊【9月第3期 2023-09-17】

国内文章 在.NET 8 RC1 版本中 MAUI、ASP.NET Core 和 EF8 的新特性 https://www.cnblogs.com/shanyou/p/17698428.html 从年初2 月份发布第一个预览版,经历7个预览版后,Microsoft 西雅图时间9月13日发布了 .NE

.NET周报【12月第3期 2022-12-23】

由于众所周知的原因,大佬们纷纷加入羊群,笔者也未能幸免,体验下来这绝对不是普通感冒的症状,身体不适,熬了几天,所以本周更新比较晚;另外精力有限,对于国际板块只有链接没有简介,十分抱歉! 在这个艰难时刻,大家照顾好自己和家人,做好防护,祝没羊的永远"郭襄",祝已羊的早日康复,没有一个冬天不可逾越,没有

第一百零五篇:变量的原始值和引用值

好家伙,JS基础接着学, 本篇内容为《JS高级程序设计》第四章学习笔记 1.原始值和引用值 ECMAScript变量可以包含两种不同类型的数据:原始值和引用值。原始值(primitive value)就是最简单的数据,引用值(reference value)则是由多个值构成的对象。 在把一个值赋给变

第一百零六篇:变量的不同声明(var,let和const的不同)

JS关于变量的声明,变量提升,暂时性死区

第一百零七篇:基本数据类型(undefined,null,boolean类型)

好家伙, 本篇内容为《JS高级程序设计》第三章学习笔记 1.数据类型 ECMAScript有6种简单数据类型(称为原始类型): Undefined, Null, Boolean, Number, String和Symbol。 Symbol (符号)是ECMAScript6新增的。还有一种复杂数据类型

第一百零八篇:最常用的基本数据类型(Number类型)

最常用的基本数据类型(Number类型)

第一百一十篇:内存泄漏和垃圾回收(JS)

好家伙,本篇内容为《JS高级程序设计》第四章的学习笔记 1.内存泄露 1.1.什么是内存泄漏? 内存泄漏(Memory Leak)是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。 内存泄漏缺陷具有隐蔽性、积累性的特征,比其

第一百一十一篇:基本引用类型Date

好家伙,本篇为《JS高级程序设计》第五章的学习笔记 1.基本引用类型 引用值(或者对象)是某个特定引用类型的实例,在ECMAScript中,引用类型是把数据和功能组织到一起的结构,(像极了“类”) 经常被人错误的称作“类”。 虽然从技术上讲JavaScript是一门面向对象语言,但是ECMAScri

第一百一十二篇: JS数组Array(一)数组基本用法

好家伙, 1.数组 Array应该就是ECMAScript中最常用的类型了。ECMAScript数组跟其他编程语言的数组有很大区别。 跟其他语言中的数组一样,ECMAScript 数组也是一组有序的数据, 但跟其他语言不同的是,数组中每个槽位可以存储任意类型的数据。 这意味着可以创建一个数组,它的第