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

call apply bind

时间:2019-12-12 13:32:22      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:怎样   查找   封装   区别   alert   font   统一   code   改变   

相同点:

首先这三个都是改变函数的this指向的,都可以后续传参

区别:

1、调用

        function fun(a, b) {
            alert(this.name);
        }

        var obj = {
            name: "obj",
            sayName: function () {
                alert(this.name);
            }
        };
        var obj2 = {
            name: "obj2"
        };
        fun.call(obj2)

alert的答案是obj2,此时this指向了obj2

对于apply可以这样:

fun.apply(obj2)

对于bind需要这样:

fun.bind(obj)()

因为bind方法返回的是一个函数,不会立即执行,需要()这样调用执行

2、传参

call()方法可以将实参在对象之后依次传递

fun.call(obj,2,3);
apply()方法需要将实参封装到一个数组中统一传递
fun.apply(obj,[2,3]);
bind在调用的时候传参
fun.bind(obj)(2, 3)

深入理解:

想要知道call是怎样被执行的,涉及到了原型链查找机制。

fun.call(obj)

其实是首先通过fun的原型链,找到Function.ptototype中的call方法,call方法中的this指向的就是fun,然后在执行call方法的时候,改变了this的指向,成了obj

 

 

call apply bind

标签:怎样   查找   封装   区别   alert   font   统一   code   改变   

原文地址:https://www.cnblogs.com/lyt0207/p/12028481.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!