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对象,如果是一般的基本数据类型,则为对应的包装数据类型。
推荐阅读
- JavaScript数组有哪些数据操作和排序函数(完整的数组相关函数说明和使用实例)
- JavaScript中如何移除对象的属性或方法(手动释放内存有哪些方式?)
- JavaScript数组遍历有哪些方式(如何进行数值遍历?哪种方式更好?)
- 使用JavaScript或jQuery如何实现滚动到页面顶部或底部()
- 如何将使用JavaScript请求到的JSON数据根据时间进行重新排序()
- 如何实现websocket长连接发送消息到前端()
- JavaScript的变量作用域是什么(如何理解变量作用域?)
- 如何使用CSS使div垂直滚动()
- Perl哈希详细解读