ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

call、apply、bind

2022-01-14 15:35:30  阅读:131  来源: 互联网

标签:... call bind 调用函数 参数 apply Math


 

call() 和apply()可以看作是某个对象的方法,通过调用方法的形式来间接调用函数

都是在特定作用域中调用函数,等于设置在函数体内的this的值。

call()和apply()的第一实参是要调用函数的母对象。

注:在严格模式中,call()和apply()第一个实参都会变成this的值,哪怕传入的实参是null 或undefined。

call()

call()的第一个参数是this值没有变化,其余参数都是直接传递给函数,换句话说,传递给函数的参数必须逐个列举出来。

function f() { }
var o = {};

// 要想以对象o的方法来调用函数f(),可以下面的写法
f.call(o);

// 与下面代码的功能类似:
o.m = f;
o.m();
delete o.m;

// 列举除第一个参数外的其余参数 Math.min.call(this,1,2,3,4,5); // 1 Math.max.call(this,1,2,3,4,5); // 5 // ES6语法 ...为ES6新增的 扩展运算符 Math.min(...[1,2,3,4,5]); // 1 Math.max(...[1,2,3,4,5]); // 5

 

apply()

apply()的用法和call()并无区别,只是参数不同。apply()方法接收两个参数,一个是在运行函数的作用域,另一个是数组(可以是Array实例,也可以是arguments对象)。

 

function f() { }
var o = {};

// 要想以对象o的方法来调用函数f(),可以下面的写法
f.apply(o);

// 与下面代码的功能类似(假设对象o中没有m属性):
o.m = f;
o.m();
delete o.m;

// 列举除第一个参数外的其余参数
Math.min.apply(this, [1, 2, 3, 4, 5]); // 1
Math.max.apply(this, [1, 2, 3, 4, 5]); // 5

// ES6语法 ...为ES6新增的 拓展运算符
Math.min(...[1, 2, 3, 4, 5]); // 1
Math.max(...[1, 2, 3, 4, 5]); // 5

 

bind()

  bind的主要作用是将函数绑定到某个对象。返回一个新函数。

  通过可选的指定参数,作为指定对象的方法调用该方法。

 

function f(y) { return this.x + y;}
var o = { x: 1 };
var g = f.bind(o); // 通过g(x)来调用o.f(x)
g(2); // 3

 

 

 

 

 

 

...为ES6新增的 扩展运算符

标签:...,call,bind,调用函数,参数,apply,Math
来源: https://www.cnblogs.com/liuyuanfang/p/13893478.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有