Function.protype.call 函数意义:调用一个对象的一个方法,以另一个对象替换当前对象。 函数语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]])

参数:thisObj 可选项。将被用作当前对象的对象。 arg1, arg2, , argN 可选项。将被传递方法参数序列。 说明 call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。 如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。

举个例子:

1
2
3
4
5
6
7
function add(a,b) { 
    console.log(a+b); 
}
function sub(a,b) { 
    console.log(a-b); 
}
add.call(sub,3,1);

结果为:4,意味add方法代替了sub方法。

在举个例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
function dog(){ 
    this.name = "排骨"; 
    this.eat = function(){
        console.log(this.name); 
    } 
}
function cat(){
    this.name = "鱼";
}
var d= new dog(); 
var c = new cat(); 
//狗变成猫的嘴巴吃鱼
d.eat.call(c);

结果为:鱼。

实现继承:

1
2
3
4
5
6
7
8
9
10
function parents(){
    this.go = function(txt){ 
        console.log(txt);
    } 
}
function childs(){
    parents.call(this);
}
var c = new childs();
c.go("走起!!!");

结果:走起!!!。

多重继承:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function parents(){ 
    this.go = function(txt) { 
        console.log(txt);
    } 
}
    
function mother(){
    this.goBack = function(txt){ 
        console.log(txt);
    } 
}
    
function childs(){ 
    parents.call(this);
    mother.call(this);
}
var c = new childs();
c.go("走起!!!");
c.goBack('回来!!!');

func.call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 通过以上的实例,让我了解在对象时,把func的上下文传递给thisObj中,同时也把传递过去。在某些时候很有用。

Function.protype.apply

函数意义:应用某一个对象的一个方法,用另一个对象替换当前对象。

函数语法:apply([thisObj[,argArray]]);

函数说明:如果argArray不是一个有效的数组或者不是arguments对象,那么将导致 TypeError。

如果没有提供argArray和thisObj任何一个参数,那么Global对象将被用作thisObj,并且被传递任何参数.

apply和call的区别:

1.call的第二参数及以后都是参数 apply的第二参数是数组

2.传递上下文功能相反。

参考