Difference between bind, apply and call method?

前端 未结 3 426
刺人心
刺人心 2020-12-28 09:05

I was searching in stackoverflow and the web, could not get proper results or explanation siting difference between these three methods.

As far as i understand, the

3条回答
  •  既然无缘
    2020-12-28 09:57

    apply and call are the same thing except one accepts the arguments to be passed to the function in array form the other in parameter form.

    bind does the same thing as call or apply depending on the framework you are using but doesn't call the function right away instead it returns a new function with your parameters bound to this and when the function is called from a new scope or context, this will still remain whatever you bound to it. Binding also allows you to prevent your constructors from being "hacked" by apply or call since it will always use the binded parameters for this no matter what someone sends to attempt to override this via call or apply.

    Here is an example:

    function Profile(u) {
        this.user = u;
        this.getUser = function () {
            return this.user;
        };
    }
    
    function Profile2(u) {
        this.user = u;
        this.getUser = (function () {
            return this.user;
        });
    }
    
    function Profile3(u) {
        this.user = u;
        this.getUser = (function () {
            return this.user;
        });
    }
    
    var x = new Profile('guest');
    var x2 = new Profile2('guest');
    var x3 = new Profile3('guest');
    
    alert(x.getUser.apply({
        user: 'Vinoth'
    })); // Vinoth
    alert(x2.getUser.call({
        user: 'Babu'
    })); // babu
    alert(x3.getUser.bind(x3).call({
        user: 'Nandan'
    })); // Guest
    

提交回复
热议问题