chunianyo 2019-12-12
首先这三个都是改变函数的this指向的,都可以后续传参
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方法返回的是一个函数,不会立即执行,需要()这样调用执行
call()方法可以将实参在对象之后依次传递
fun.call(obj,2,3);
fun.apply(obj,[2,3]);
fun.bind(obj)(2, 3)
想要知道call是怎样被执行的,涉及到了原型链查找机制。
fun.call(obj)
其实是首先通过fun的原型链,找到Function.ptototype中的call方法,call方法中的this指向的就是fun,然后在执行call方法的时候,改变了this的指向,成了obj