这篇文章将为大家详细讲解有关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怎么用”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。