每个函数都包含2个非继承而来的写法:apply()
和call()
- 作用:2者都是在特定的作用域中调用函数,实际上等于设置函数体内
this
对象的值 - 区别:仅在于接收参数的方式不同,第一个参数都是
this
值,也就是运行函数的作用域;而第二个参数,apply()
接收参数数组(可以是Array
实例,也可以是arguments
对象),call()
接收参数列表
function animal(name,age,color){
this.name = name;
this.age = age;
this.color = color;
console.log(this);
}
var dog = new animal;
animal.call(dog,'Alex',3,'white'); //{name: "Alex", age: 3, color: "white"}
animal.apply(dog,['Alex',3,'white']); //{name: "Alex", age: 3, color: "white"}
-
apply()
和call()
真正强大之处在于能够扩充函数赖以运行的区域
var name = "Taylor";
var boy = {name:"Asher"}
function sayName(){
console.log(this.name);
}
sayName(); //Taylor
sayName.call(boy); //Asher