首页 > 其他分享 >第123篇: JS函数属性与方法

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

时间:2023-02-27 19:13:15浏览次数:36  
标签:函数 color sayColor JS 123 call apply 方法 属性

好家伙,本篇为《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();

 

 

标签:函数,color,sayColor,JS,123,call,apply,方法,属性
From: https://www.cnblogs.com/FatTiger4399/p/17160587.html

相关文章

  • Acwing 1238. 日志统计(双指针)
    https://www.acwing.com/problem/content/1240/1238.日志统计输入样例:71020101010101019110031003输出样例:13首先注意数据范围,0-1e5的数据范围......
  • JS 代码片段 / 预编译/预解析 /执行上下文/ECG/EC/ECS/GO/VO/AO
    代码段概念一个script就是一个代码段在一个页面中可以有多个代码段每一个代码段,彼此独立的,如果上面的代码段报错了,不会影响下一个代码段referenceError引用错......
  • JS 代码片段 / 预编译/预解析 /执行上下文/ECG/EC/ECS/GO/VO/AO
    代码段概念一个script就是一个代码段在一个页面中可以有多个代码段每一个代码段,彼此独立的,如果上面的代码段报错了,不会影响下一个代码段referenceError引用错......
  • JS 判断数组对象中某个字段有无重复
    判断一个数组中对象中,某个字段是否有重复1.使用setmap实现letarr=[{name:'zhang',id:'1001'},{nmae:'li',id:'1001'}]//判断id是否重复//返回一个id......
  • FastJson参数
    名称含义备注QuoteFieldNames输出key时是否使用双引号,默认为true UseSingleQuotes使用单引号而不是双引号,默认为false WriteMapN......
  • JSP环境搭建及入门 和 虚拟路径和虚拟主机
    Jsp:是一个动态网页,而不是静态网页html,css,js,Jquery:是静态网页动态网页是随着,时间,地点,用户操作,而改变静态不需要jsp动态是需要的 BS可以通过浏览器直接访问......
  • python序列化 json和pickle
    #1、什么是序列化#序列化指的是把内存的数据类型转成一个特定格式的内容#该格式的内容可用于存储或者传输给其它平台使用#内存中的数据类型---》序列化----》特定......
  • json-bigint处理前端long丢失精度问题
    通过ajax请求回来的数据在response和preview两种状态显示的id是不同的。      原因:response中的看到的数据格式其实是字符串(ajax请求回来的数据本质上是字......
  • 使用 nvm 管理 node.js 版本
    使用nvm管理node.js版本摘自:https://www.jianshu.com/p/89a4adf76c86简介在实际的前端开发过程中,可能会经常遇见node.js的版本问题,不同的项目需要使用不同的node......
  • jQuery 好用的丰富JS函数库
    课程简介和目标为什么使用jQuery?使用原生JavaScript编码存在问题1选择器功能弱2DOM操作繁琐之极3浏览器兼容性不好4动画功能弱jQuery的优点1强大的选择器2出色的DOM......