JavaScript中函数对象的call()和apply()方法的总结

在JavaScript中,每个函数都有call()和apply()方法,用法举例如下:

  先定义一个some_obj的对象,该对象有一个say()方法:

  var some_obj={
    name:‘Ninja‘,
    say:function(who){
      return ‘Haya ‘ + who + ‘, I am a ‘+ this.name;
    }
  };

  调用some_obj.say(‘Dude‘);

  输出:"Haya Dude, I am a Ninja"

  再创建一个对象

  var my_obj={name: ‘Scripting guru‘};

  我们现在想将some_obj中的say()方法当做my_obj自身的方法来调用,在这种情况下,可以试试say()函数中的对象方法call()

  some_obj.say.call(my_obj,‘Dude‘);

  输出:"Haya Dude, I am a Scripting guru";

  另外,如果我们没有将对象传递给call()的首参数,或者传递给它的是null,调用对象会被默认为全局对象(见注:);

  注:this 指向的是全局对象,实际上就是通过call的首个参数修改了对象函数的this 值;

  若使用对象方法apply();

  some_obj.say.apply(my_obj,[‘Dude‘]);

  输出:"Haya Dude, I am a Scripting guru";

  由此可见,apply()与call()基本相同,不同的是参数的传递形式,apply()传递的参数形式是数组;

  传递更多参数:some_obj.someMethod.call(my_obj,‘a‘,‘b‘,‘c‘);

时间: 2024-08-02 11:03:34

JavaScript中函数对象的call()和apply()方法的总结的相关文章

函数对象的call()、apply() 方法区别

函数对象的call().apply() 方法 函数作为对象提供了call(),apply() 方法,他们也可以用来调用函数,这两个方法都接受一个对象作为参数,用来指定本次调用时函数中this的指向: call()方法 call方法使用的语法规则 函数名称.call(obj,arg1,arg2...argN); 参数说明: obj:函数内this要指向的对象, arg1,arg2...argN :参数列表,参数与参数之间使用一个逗号隔开 var lisi = {names:'lisi'}; var

JavaScript中函数对象和对象的区别

function Test (word) { console.log (word); } Test('哈哈,我是函数'); new Test('哈哈,我是对象'); //将以上的调用方式换种通俗易懂的方式 Test.call("哈哈,我是函数"); //相当于Test(); //相当于new Test(); var obj = {}; obj._proto_ = Test.prototype; Test.call(obj); 本质的区别就是,两次调用之中的this不同.调用Test('

理解JavaScript中函数的使用

函数是进行模块化程序设计的基础,编写复杂的Ajax应用程序,必须对函数有更深入的了解. JavaScript中的函数不同于其他的语言,每个函数都是作为一个对象被维护和运行的.通过函数对象的性质,可以很方便的将一个函数赋值给一个变量或者将函数作为参数传递.在继续讲述之前,先看一下函数的使用语法: function func1(…){…} var func2=function(…){…}; var func3=function func4(…){…}; var func5=new Function(

__x__(69)0926第十一天__ JavaScript 指定函数对象的 this 上下文对象

指定函数对象的 this 上下文对象 即调用函数对象的 .call() 或者 .apply() 方法 指定 this 指向指定的对象. function myFun(){ document.write("我是"+this.name); } var sun = {name:"孙悟空"}; var zhu= {name:"猪八戒"}; .call(); myFun.call(sun); // 我是孙悟空 .apply(); myFun.apply(z

Javascript中函数的四种调用方式

一.Javascript中函数的几个基本知识点: 1.函数的名字只是一个指向函数的指针,所以即使在不同的执行环境,即不同对象调用这个函数,这个函数指向的仍然是同一个函数. 2.函数中有两个特殊的内部属性:arguments和this. arguments主要是用来保存函数参数,arguments中的callee属性主要是用来指向拥有当前arguments的函数(理解Javascript参数中的arguments对象). 3.在ECMAScript5中规范了另一个函数属性:caller(Opera

JavaScript中函数的四种调用模式

理解函数的四种调用方法,可以有效的帮助我们分析和理解JavaScript代码.但是经常有人分不清楚或者不理解这四种调用模式,在JavaScript中,函数是一等公民,函数在JavaScript中是一个数据类型,而非像C#或其他描述性语言那样仅仅作为一个模块来使用.函数有四种调用模式,分别是:1.函数调用形式 2.方法调用形式 3.构造器调用形式 4.上下文调用形式(apply,call)这里所有的调用模式中,最主要的区别在于关键字 this 的意义.下面分别介绍这几种调用形式. 一.函数调用形式

私人定制javascript中函数小知识点

函数的定义 首先在javascript中,函数就是对象,程序可以随意操控它们.比如,可以给它们设置属性,甚至调用它们的方法.函数使用function关键字来定义.它既可以用在函数定义表达式,也可以用在函数声明语句中.函数声明function后面必须要更上函数名称也就是所谓的函数名称标识符.如果是函数表达式函数名称标识符可有可无.这段重点是函数是对象,所以函数表现出来的种种行为你想想成对象,那么很多疑惑可能就恍如昨日初见. 函数调用 4种方式来调用javascript函数: 1.作为函数 就是函数

javascript 中的继承实现, call,apply,prototype,构造函数

javascript中继承可以通过call.apply.protoperty实现 1.call call的含义: foo.call(thisObject, args...) 表示函数foo调用的时候,上下文切换为thisObject,意思是用thisObject来调用foo方法,如果没有指定thisObject,则外部的Global对象被用作默认的thisObject function foo() { if (!this.s_name) { // 避免被this的属性重新赋值 this.s_na

(转)JavaScript中判断对象类型的种种方法

我们知道,JavaScript中检测对象类型的运算符有:typeof.instanceof,还有对象的constructor属性: 1) typeof 运算符 typeof 是一元运算符,返回结果是一个说明运算数类型的字符串.如:"number","string","boolean","object","function","undefined"(可用于判断变量是否存在). 但 type