【常忘系列1】—Function.prototype里面的call和apply

总是忘掉这两个东东的用下,写下来作个记录吧。
他们做用是如出一辙的,只是传入的参数不同浏览器

apply
apply接受两个参数,第一个制定了函数体内this对象的指向,第二个参数为一个带下标的集合(可遍历对象),apply方法把这个集合中的元素做为参数传递给被调用的函数:app

var func = function(a, c, c){
    alert([a,b,c]); //[1,2,3]
}
func.apply(null, [1,2,3]);

call
call传入的参数不固定,和apply相同的是,第一个参数也是表明函数体内的this指向,第二个参数开始日后,每一个参数被依次传入函数:函数

var func = function(a, b, c){
    alert([a,b,c]); //[1,2,3]
}
func.call(null, 1,2,3);

call是aplly的一颗语法糖。若是第一个参数为null,函数体内的this指向宿主对象,在浏览器中是window。this

call和apply的用途
1.改变this指向
上面的例子就是啦prototype

2.Function.prototype.bind
模拟Function.prototype.bindcode

Function.prototype.bind = function(context){
    var self = this;
    return function(){
        return self.apply(context, arguments);
    }
};

var obj = {
    name: 'cxs'
};

var func = function(){
    alert(this.name); //cxs
}.bind(obj);

fun();
相关文章
相关标签/搜索