千家信息网

Call和apply怎么用

发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,这篇文章将为大家详细讲解有关Call和apply怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。. 每一个函数都包含两个非继承而来的函数: call,apply
千家信息网最后更新 2025年01月21日Call和apply怎么用

这篇文章将为大家详细讲解有关Call和apply怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

. 每一个函数都包含两个非继承而来的函数: call,apply. 在特定的作用域中调用函数, 实际上相当于 函数体内this对象的值

.call,apply 用途之一就是传递参数. 实际上强大的地方是 : 扩大函数的作用域

eg1: ( 传递参数 )

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

function sum(x,y){

return x+y;

}

function call1(n1,n2){

return sum . call ( this,n1,n2 ); //~~~ return sum.apply(this , [ n1, n2 ] );

}

alert(call1(10,20)); //alert(30);

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

eg2: (扩充作用域) 好处: 对象和方法 没有 耦合关系

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

window.color = ' red ';

var obj = { color : ' blue'};

function showColor() {

alert( this.color );

}

showColor.call( window ); // showColor.call(this); // red

showColor.call( obj ); //blue

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

//自定义对象

function Obj ( x , y){

this.x = x;

this.y = y;

return x*y ;

}

// 方法

function fun( a , b ){

return a + b;

}

var obj = new Obj (10 , 20);

alert( fun . call ( obj , obj.x , obj.y ); // 30

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

举几个具体例子:

例子1:

function add(a,b)

{

alert(a+b);

}

function sub(a,b)

{

alert(a-b);

}

//add.call(sub,3,1);

add.apply(sub,[3,1]);

例子2:

function Class1()

{

this.name = "class1";

this.showNam = function()

{

alert(this.name);

}

}

function Class2()

{

this.name = "class2";

}

var c1 = new Class1();

var c2 = new Class2();

//c1.showNam.call(c2); //class2

c1.showNam.apply(c2);

例子3:

var func=new function(){this.a="func"};

// var func = { a:"func"};

var myfunc=function(x){

var a="myfunc";

alert(this.a);

alert(x);

};

// myfunc.apply(func,"var");

myfunc.apply(func,["var"]);

例子4:[吊炸天有木有~call 可以用来实现继承]

function Class1()
{
this.showTxt = function(txt)
{
alert(txt);
}
}
function Class2()
{
Class1.call(this);
}
var c2 = new Class2();
c2.showTxt("cc");

例子5:多继承[javaScript 如何来模拟面向对象的继承,还可以实现多重继承]

function Class10()

{

this.showSub = function(a,b)

{

alert(a-b);

}

}

function Class11()

{

this.showAdd = function(a,b)

{

alert(a+b);

}

}

function Class2()

{

Class10.call(this);

Class11.call(this);

}

var c2 = new Class2();

c2.showAdd(1,4); //5

c2.showSub(10,6);//4

关于"Call和apply怎么用"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

0