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 用法

时间: 2024-10-24 09:23:04

Call && apply 用法的相关文章

GroupBy,Apply用法笔记

GroupBy针对DataFrame将其按照某个准则分组 1.常见的调用形式为: df['a'].GroupyBy(df['b']) df.GroupyBy(df['b','c'])#层次化的索引 df.GroupyBy(['b','c'])#直接将columns名称作为索引键进行索引 以上可理解为将Series作为分组键,y此外还可以将任何适当长度的array作为分组键,目前未尝试过 2.常用的方法: df.GroupyBy(df['b']).mean()#非数值列数据直接跳过 df.Grou

js apply()用法

Js apply方法详解 我在一开始看到javascript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply方法和call的一些示例,总算是看的有点眉目了,在这里我做如下笔记,希望和大家分享..  如有什么不对的或者说法不明确的地方希望读者多多提一些意见,以便共同提高.. 主要我是要解决一下几个问题: 1.apply和call的区别在哪里 2.什么情况下用apply,什么情况下用call 3.apply的其他巧妙用法(一般在什么情况下可以使用apply)

[转]js之this,call,apply用法

(一)关于this 首先关于this我想说一句话,这句话记住了this的用法你也就差不多都能明白了:this指的是当前函数的对象.这句话可能比较绕,我会举出很多例子和这句话呼应的!(看下文)1.首先看下面这段代码, 定义一个函数,弹下this, Js代码   function doSomething(){ alert(this); } doSomething(); 我是在firefox里面调试的,所以返回的结果是[Object Window].那么这个 [Object Window], 到底是什

T-SQL中的APPLY用法(半翻译)

本文接上文:T-SQL 中的CROSS JOIN用法(半翻译) 同样可用于微软认证70-461: Querying Microsoft SQL Server 2012考试的学习中. ---------------------------------------------------------------------以下为译文----------------------------------------------------------------------- 原文出处:http://w

R语言串行与并行Apply用法

串行 APPLY<- function(m){ mTemp <- apply(m, 2, mysort) return(mTemp)} snowfall包的并行 SNOWFALL<-function(m,ncl){ library(snowfall) sfInit(parallel = TRUE, cpus = ncl) mTemp<- sfApply(m,2,mysort) sfStop() return(mTemp)}

js里apply用法

1.Function.apply,用于构造函数的继承,继承另外一个构建对象的属性与方法 function People(name,age){    this.name = name;    this.age = age;} function Student(age){    this.age = age;    People.apply(this,arguments)}var stu = new Student('liujinyu','12');var peo = new People('liu

apply用法

result.push.apply(result, document.getElementsByTagName(tag)); 但是,这里为什么要用apply呢? 因为document.getElementsByTagName() 返回一个伪数组,但是push方法只能接受真数组,在这里调用apply,因为apply接受的其他参数必须是一个数组,这里把document.getElementsByTagName() 的返回结果进行展开,然后一个一个push进去.

T-SQL中的APPLY用法

上周和team leader 讨论问题的时候, 发现自己连 sqlserver 中的 apply  都不会用,赶快,今天来恶补一哈: sql 脚本准备: IF object_id('dbo.Product') IS NOT NULL DROP TABLE dbo.Product; IF object_id('dbo.SearchString') IS NOT NULL DROP TABLE dbo.SearchString; IF object_id('dbo.FindProductLike')

SQL语句 - MERGE INTO 、Cross/Outer Apply用法理解

MERGE INTO 语法: MERGE INTO table_name alias1 USING (table|view|sub_query) alias2ON (join condition) WHEN MATCHED THEN   UPDATE table_name    SET col1 = col_val1,      col2 = col2_val WHEN NOT MATCHED THEN   INSERT (column_list) VALUES (column_values);