call、apply和bind的用法、理解,差异

一、上来直接用… 用法简单清晰

用法几乎一样

 - call:function.call(thisArg, arg1, arg2, ...) // 参数全部可选
 - apply: function.apply(thisArg, [argsArray])  // 第一个参数必填,第二个参数是数组
 - bin: function.bind(thisArg[, arg1[, arg2[, ...]]])

可以看到 用法几乎一样。

个人理解:call的用法,就是让一个【函数】,使用另外一个【对象】的属性或方法;
换句话说:就是将一个【对象】的属性或方法,注入到当前【函数】中;

二、call、

语法
	function.call(thisArg, arg1, arg2, ...)
参数
	【thisArg】:**可选的**。在 function 函数运行时使用的 this 值。
	【arg1, arg2, ...】:指定的参数列表。

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

你可以使用 call 来实现继承:写一个**方法**,然后让另外一个**新的对象**来继承它(而不是在新对象中再写一次这个方法)。

三、apply、MDN官方解释

语法
	func.apply(thisArg, [argsArray])
参数
	【thisArg】**必选的**。在 func 函数运行时使用的 this 值。
	【argsArray】**可选的**。一个数组或者类数组对象,其中的数组元素将作为单独的参数传给 func 函数。
	如果该参数的值为 null 或  undefined,则表示不需要传入任何参数。
返回值
	调用有指定this值和参数的函数的结果。

描述
	1.在调用一个存在的函数时,你可以为其指定一个 this 对象。 【必填项的参数】
		this 指当前对象,也就是正在调用这个函数的对象。 
		使用 apply, 你可以只写一次这个方法然后在另一个对象中继承它,而不用在新对象中重复写该方法。
	2.apply 与 call() 非常相似,不同之处在于【提供参数的方式】。
		apply 使用【参数数组】而不是一组参数列表。
		apply 可以使用数组字面量(array literal),如 fun.apply(this, ['eat', 'bananas']),
				或数组对象, 如  fun.apply(this, new Array('eat', 'bananas'))3.你也可以使用 arguments对象作为 argsArray 参数。 
    	arguments 是一个函数的局部变量。 它可以被用作被调用对象的所有未指定的参数。 
    	这样,你在使用apply函数的时候就不需要知道被调用对象的所有参数。 
    	你可以使用arguments来把所有的参数传递给被调用对象。 被调用对象接下来就负责处理这些参数。

es6新增类数组用法:

从 ECMAScript 第5版开始,可以使用任何种类类数组对象,就是说只要有一个 length 属性和(0…length-1)范围的整数属性。
例如现在可以使用 NodeList 或一个自己定义的类似 {‘length’: 2, ‘0’: ‘eat’, ‘1’: ‘bananas’} 形式的对象。

四、bind、MDN官方解释

语法
	function.bind(thisArg[, arg1[, arg2[, ...]]])
参数
	【thisArg】调用绑定函数时作为 this 参数传递给目标函数的值
	【arg1, arg2, ...】当目标函数被调用时,被预置入绑定函数的参数列表中的参数。
返回值
	返回一个原函数的拷贝,并拥有指定的 this 值和初始参数。
描述
	bind() 函数会创建一个新的绑定函数(bound functionBF)。
	绑定函数是一个 exotic function object(怪异函数对象,ECMAScript 2015 中的术语),它包装了原函数对象。
	调用绑定函数通常会导致执行包装函数。
	
	绑定函数具有以下内部属性:
	[[BoundTargetFunction]] - 包装的函数对象
	[[BoundThis]] - 在调用包装函数时始终作为 this 值传递的值。
	[[BoundArguments]] - 列表,在对包装函数做任何调用都会优先用列表元素填充参数列表。
	[[Call]] - 执行与此对象关联的代码。通过函数调用表达式调用。
		内部方法的参数是一个this值和一个包含通过调用表达式传递给函数的参数的列表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值