今天做了一个相关的小题儿,没想到还做错了,分享一下子 :
以下对call() 和 apply() 说法哪些是正确的 ()
1.apply()函数有两个参数:第一个参数是上下文,第二个参数是参数组成的数组;
2.如果第一个参数是null,则使用全局对象代替;
3.call和apply的意思一样,只不过是参数列表不一样.
4.通过apply可以将数组装换为参数列表的集合
答案:all right (1 2 3 4)
分析一下子---------------
相同点:
都可以用来代替另一个对象调用一个方法,将一个函数的对象上下文从初始的上下文改变为由this指定的新对象。
不同点:
apply:最多只能有两个参数——B.apply(A, [1,2,3])。 A调用B对象的方法
call:它可以接受多个参数,B.apply(A ,1,2,3)。 A调用B对象的方法
实际上,apply和call的功能是一样的,只是传入的参数列表形式不同。
来点代码。更直观一些:
1、基本常用的方法
function add(a,b){
return a+b;
}
function sub(a,b){
return a-b;
}
var result1 = add.apply(sub,[1,2]); sub方法里实际调用的是add方法里的逻辑
var result2 = sub.apply(add,[1,2]);
console.log(result1); //3
console.log(result2); //-1
2、用来继承
function Student(name){
this.name = name;
this.showName = function(){
console.log(this.name);
}
}
function Teacher(name){
Student.apply(this,[name]);
}
var PDD = new Teacher("马老师");
PDD.showName(); //马老师