JS的改变this指向:apply, call与bind方法

JavaScript开发者有必要理解apply、call与bind方法的不同点。它们的共同点是第一个参数都是this,即函数运行时依赖的上下文。

三者之中,call方法是最简单的,它等价于指定this值调用函数:

var user = {

    name: "Rahul Mhatre",

    whatIsYourName: function() {

        console.log(this.name);

    }

};

 

user.whatIsYourName(); // 输出"Rahul Mhatre",

 

var user2 = {

    name: "Neha Sampat"

};

user.whatIsYourName.call(user2); // 输出"Neha Sampat"

apply方法与call方法类似。两者唯一的不同点在于,apply方法使用数组指定参数,而call方法每个参数单独需要指定:

apply(thisArg, [argsArray])

call(thisArg, arg1, arg2, …)

var user = {

    greet: "Hello!",

    greetUser: function(userName) {

        console.log(this.greet + " " + userName);

    }

};



var greet1 = {

    greet: "Hola"

};

user.greetUser.call(greet1, “Rahul”); // 输出"Hola Rahul"

user.greetUser.apply(greet1, [“Rahul”]); // 输出"Hola Rahul"

使用bind方法,可以为函数绑定this值,然后作为一个新的函数返回:

var user = {

     greet: "Hello!",

     greetUser: function(userName) {

     console.log(this.greet + " " + userName);

     }

};



var greetHola = user.greetUser.bind({greet: "Hola"});

var greetBonjour = user.greetUser.bind({greet: "Bonjour"});

greetHola(“Rahul”) // 输出"Hola Rahul"

greetBonjour(“Rahul”) // 输出"Bonjour Rahul"

发布了37 篇原创文章 · 获赞 20 · 访问量 6748

猜你喜欢

转载自blog.csdn.net/qq_39051175/article/details/99689447