码迷,mamicode.com
首页 > 移动开发 > 详细

js中call、apply和bind的区别

时间:2018-04-16 22:19:29      阅读:63      评论:0      收藏:0      [点我收藏+]

标签:面试   script   作用   题目   str   区别   上下文   遇到   getname   

前言

关于js中call、apply和bind这三者的区别,这应该是一个老生常谈的问题,也是前端面试时经常会遇到的一道题目,因此也抽空把它理一遍。

作用

call、apply和bind都是一个javascript中的方法,他们的共同作用就是改变函数执行时的上下文,即改变函数执行时this的指向。我们来看下面的例子:

 1 function Animal(name) {
 2     this.name = name;
 3 }
 4 Animal.prototype.getName = function() {
 5     console.log(this.name);
 6 }
 7 var dog = new Animal(‘dog‘);
 8 var cat = {
 9     name: ‘cat‘
10 };
11 dog.getName();    // dog
12 dog.getName.call(cat);    // cat
13 dog.getName.apply(cat);    // cat
14 dog.getName.bind(cat)();    // cat

上面的例子中,一开始 getName 方法中this的指向是dog对象,所以第一次执行时输出的是‘dog‘,但在使用call、apply和bind分别改变getName执行时的上下文,this的指向就变成了cat对象,因此此时输出的name是cat对象的name即 ‘cat‘。

区别

尽管call、apply和bind三个方法的作用都是改变函数执行时this的指向,但它们在使用上还是有一定的区别。

(1)call、apply与bind的区别

  call和apply都是改变函数的上下文this的指向后立即执行该函数,而bind则是返回改变上下文this后的一个函数。

(2)call和apply两者的区别

  call和apply的第一个参数都是要改变的上下文对象,call从第二个参数开始以及后面的参数都是以参数列表的形式展现,而apply则是把除了要改变的上下文对象外的其他参数放在一个数组作为它的第二个参数。

1 fn.call(obj, arg1, arg2, arg3...);
2 fn.apply(obj, [arg1, arg2, arg3...]);

 

js中call、apply和bind的区别

标签:面试   script   作用   题目   str   区别   上下文   遇到   getname   

原文地址:https://www.cnblogs.com/Hyacinth-zqz/p/8858020.html

(0)
(0)
   
举报
评论 一句话评论(0
0条  
登录后才能评论!
© 2014 mamicode.com 版权所有 京ICP备13008772号-2
迷上了代码!