手记

javascript中的this,call, apply,bind的用法

学习js前期时,对于this,apply和bind的用法很是模糊,于是上网查了一些资料,自己总结了一些经验,现在和大家分享一下。

this的用法详解
由于其运行期绑定的特性,JavaScript 中的 this 含义要丰富得多,它可以是全局对象、当前对象或者任意对象,这完全取决于函数的调用方式。JavaScript 中函数的调用有以下几种方式:
作为对象方法调用,
作为函数调用,
作为构造函数调用,
和使用 apply 或 call 调用

this 自动引用正在调用当前方法的.前的对象
四种情况:
 一.obj.fun(this)==fun中的this=>obj
 二.new Fun(this)==Fun中的this=>正在创建的新对象
 三.fun(this)和匿名函数自调 =>this指window
 四.类型.prototype.fun(this)  fun中的this==将来调用fun的.前的子对象

子对象一定是当前类型,因为放在原型对象中的函数,只能为当前类型的函数才能够使用。

call和apply,bind的用法详解
call和apply都是改变上下文中的this并立即执行这个函数,bind方法可以让对应的函数想什么时候调就什么时候调用,并且可以将参数在执行的时候添加.

bind方法会创建一个新函数,称为绑定函数.当调用这个绑定函数时,绑定函数会以创建它时传入bind方法的第一个参数作为this,传入bind方法的第二个以及以后的参数加上绑定函数运行时本身的参数按照顺序作为原函数的参数来调用原函数.

call apply 调用函数时会立刻执行,bind创建函数时,只创建函数,不执行,后来调用才会执行
call与apply的用途
1、改变this的指向
2、调用其他对象的函数(借用构造函数实现类似继承的效果)

call方法:
语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]])
定义:调用一个对象的一个方法,以另一个对象替换当前对象。
obj:这个对象将代替Function类里this对象
arg1:把这个集合中的元素作为参数传递给被调用的函数
说明:
1:call 方法可以用来代替另一个对象调用一个方法。
2:call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。

apply方法:
语法:apply([thisObj[,argArray]])
定义:应用某一对象的一个方法,用另一个对象替换当前对象。
说明:
如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。
如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。
总结:括号内是要进行操作的对象,call前面的是被调用的函数对象

这个总结对我在编码过程中有很大的作用,希望对你也有作用。

1人推荐
随时随地看视频
慕课网APP