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
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对象,如果是一般的基本数据类型,则为对应的包装数据类型。
评论前必须登录!
注册