前端基础知识记录

JS中的apply(), call(), bind()方法

2017-07-13  本文已影响2人  大写的Q

这三个关键字经常看到,但是从来没有做过详细的区分。或者说,每次用的时候看一眼,就继续专注在别的事情上去了。今天整理一下下。

首先,这三个方法的用法十分相似,都是用来改变函数运行时的上下文联系,其实就是改变this的指向。this引用的是函数执行的环境对象,就是调用this的时候才会去寻找它指向谁。

好,先说apply和call。

两者用法基本相同,用途是在特定的作用域中调用函数,接收的第一个参数是运行函数的作用域,如果call和apply的第一个参数是null, 那么this就指向了windows。

唯一的不同是apply传参数会一整个数组传入,而call则是一个个数值进行传递。

举个栗子呢:

banana.call(this, arg1, arg2);

banana.apply(this, [arg1, arg2]);

banana.apply(this, arguments); //传入arguments对象

那么当你要传的参数数量是确定的时候呢,用哪个都可以。

可是如果你有一个数组,但你不知道里面有多少个值,这时候就需要用apply,不可以用call。

apply()和call()的强大还在于能扩充函数运行的作用域,即对象和方法不需要有耦合关系。


那么bind呢,是创建了一个新函数,this值会被绑定到传给bind()函数的值

window.a = 1;

var obj = { a: 2};

function sayA() {alert(this.a);}

var newA = sayA.bind(o);

newA(); //2

不知道大家喜不喜欢看很多例子,我是有点懒得看一些长篇大论的。。这篇总结就简短的写在这里啦

参考:

http://www.admin10000.com/document/6711.html

上一篇 下一篇

猜你喜欢

热点阅读