JavaScript中call和apply有什么区别和作用()

JavaScript中call和apply有什么区别和作用?
call()函数和apply()函数都是JavaScript中函数的函数,用于借用调用函数,call函数的第一个参数为传递的对象,该对象会赋值给函数的内部this,默认为空即this默认为window对象,第二个以及之后的参数均为要调用的函数的参数,具体使用看下面的实例:

function run(message){ console.log("running: " + message); } run.call(this, "a bird"); // 输出:running:a bird

【JavaScript中call和apply有什么区别和作用()】apply()函数和call()函数的使用类似,只不过apply()函数的第二个参数是一个数组,该数组的元素是被调用函数的参数:
function speak(subject, verb){ console.log(subject + " " + verb); }speak.apply(this, ["A bird", "flies"]) // 输出:A bird flies

所以call()函数和apply()函数的作用都是一样的,用于借用调用指定的函数,函数借用调用的作用的一个例子就是对象的继承,当一个对象继承另一个对象,当子类需要使用父类的构造函数时可以使用call()函数或apply()函数调用,例如:
// 基类构造函数 function Basic(username){ this.username = username; }// 给原型对象添加print方法 Basic.prototype.print = function(){ console.log(this.username); }// 子类构造函数 function User(username, age){ this.age = age; Basic.call(this, username); // 使用call()函数借用调用Basic构造函数 }User.prototype = new Basic(); User.prototype.constructor = User; var user = new User("Music", 18); user.print(); // Music

另外,对于call()函数和apply()函数的第一个参数,该参数用于指定函数内部的this,若为空,则this默认为window对象,如果是一般的基本数据类型,则为对应的包装数据类型。

    推荐阅读