个性化阅读
专注于IT技术分析

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

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对象,如果是一般的基本数据类型,则为对应的包装数据类型。

赞(0)
未经允许不得转载:srcmini » JavaScript中call和apply有什么区别和作用?

评论 抢沙发

评论前必须登录!