`

apply和call以及prototype用法

阅读更多

函数的apply与call方法

   这2个方法,一直摸不着头脑,现在终于弄明白.

apply和call,它们的作用都是将函数绑定到另外一个对象上去运行,两者仅在定义参数的方式有所区别:
Function.prototype.apply(thisArg,argArray);
Function.prototype.call(thisArg[,arg1[,arg2…]]);
从函数原型可以看到,第一个参数都被取名为thisArg,即所有函数内部的this指针都会被赋值为thisArg,这就实现了将函数作为另外一个对象的方法运行的目的。两个方法除了thisArg参数,都是为Function对象传递的参数。下面的代码说明了apply和call方法的工作方式:
//定义一个函数func1,具有属性p和方法A
function func1(){
      this.p="func1-";
      this.A=function(arg){
            alert(this.p+arg);
      }
}
//定义一个函数func2,具有属性p和方法B
function func2(){
      this.p="func2-";
      this.B=function(arg){
             alert(this.p+arg);
      }
}
var obj1=new func1();
var obj2=new func2();
obj1.A("byA");     //显示func1-byA
obj2.B("byB");     //显示func2-byB
obj1.A.apply(obj2,["byA"]); //显示func2-byA,其中[“byA”]是仅有一个元素的数组,下同
obj2.B.apply(obj1,["byB"]); //显示func1-byB
obj1.A.call(obj2,"byA");   //显示func2-byA
obj2.B.call(obj1,"byB");   //显示func1-byB
可以看出,obj1的方法A被绑定到obj2运行后,整个函数A的运行环境就转移到了obj2,即this指针指向了obj2。同样obj2的函数B也可以绑定到obj1对象去运行。代码的最后4行显示了apply和call函数参数形式的区别。

 

 

 

接下来,顺带讲一下Javascript的方法种类。我个人将Javascript的方法分为三种:

  <1>类方法

  <2>对象方法

  <3>原型方法

  先看代码,后讲区别:

function People(name) {
      this.name=name;
      //对象方法
      this.Introduce=function(){
            alert("My name is "+this.name);
      }
}
//类方法
People.Run=function(){
      alert("I can run");
}
//原型方法
People.prototype.IntroduceChinese=function(){
      alert(" 我的名字是"+this.name);
}

  测试下:

var p1=new People("Windking");
p1.Introduce();
People.Run();
p1.IntroduceChinese();

 

分享到:
评论

相关推荐

    js中继承的几种用法总结(apply,call,prototype)

    本篇文章主要介绍了js中继承的几种用法总结(apply,call,prototype) 需要的朋友可以过来参考下,希望对大家有所帮助

    JavaScript中apply与call的用法意义及区别说明

    apply和call,它们的作用都是将函数绑定到另外一个对象上去运行,两者仅在定义参数的方式有所区别: Function.prototype.apply(thisArg,argArray); Function.prototype.call(thisArg[,arg1[,arg2…]]); 从函数原型...

    javascript中apply和call方法的作用及区别说明

    1、call,apply都属于Function.prototype的一个方法,它是JavaScript引擎内在实现的,因为属于Function.prototype,所以每个Function对象实例(就是每个方法)都有call,apply属性。既然作为方法的属性,那它们的使用...

    Array.prototype.slice.apply的使用方法

    arguments在JavaScript语法中是函数特有的一个对象属性(Arguments对象),用来引用调用该函数时传递的实际参数。

    js中apply与call简单用法详解

    call和apply是为了动态改变this而出现的,当一个object没有某个方法,但是其他的有,我们可以借助call或apply用其它对象的方法来操作。 call, apply都属于Function.prototype的一个方法,它是JavaScript引擎内在实现...

    Function.prototype.call.apply结合用法分析示例

    昨天在网上看到一个很有意思的js面试题:var a = Function.prototype.call.apply(function(a){return a;}, [0,4,3]);alert&#40;a&#41;; 分析步骤如下,感兴趣的朋友可以参考下哈

    详解js中的apply与call的用法

    在ECAMScript3给Function的原型定义了两个方法,它们是Function.prototype.call和Function.prototype.apply。本文详细介绍了apply与call的用法,有需要的可以参考下。

    JavaScript函数apply()和call()用法与异同分析

    每个函数都包含两个属性:length和prototype,每个函数都包含两个非继承而来的方法:apply()和call()。 今天先来介绍一下前端面试中经常问到的apply()和call()的区别吧! 这两个方法的作用是在函数调用时改变函数的...

    Javascript中call,apply,bind方法的详解与总结

    以下内容会分为如下小节: ...6.call,apply,bind方法的联系和区别 1.call/apply/bind方法的来源 首先,在使用call,apply,bind方法时,我们有必要知道这三个方法究竟是来自哪里?为什么可以使用的到这三个方法?

    javascript基于原型链的继承及call和apply函数用法分析

    本文实例讲述了javascript基于原型链的继承及call和apply函数用法。分享给大家供大家参考,具体如下: 1. 继承是面向对象编程语言的一个重要特性,比如Java中,通过extend可以实现多继承,但是JavaScript中的继承...

    JS中call()和apply()的功能及用法实例分析

    本文实例讲述了JS中call()和apply()的功能及用法。分享给大家供大家参考,具体如下: 1.call()和apply()的作用 首先引出问题:用call()和apply()的目的是什么? 来看个例子,在javascript OOP中,我们经常会这样...

    javascript中call apply 与 bind方法详解

    在JavaScript中,call、apply和bind是Function对象自带的三个方法,本文将通过几个场景的应用,来详细理解三个方法。 call() call() 方法在使用一个指定的this值和若干个指定的参数值的前提下调用某个函数或方法。 ...

    简单对比分析JavaScript中的apply,call与this的使用

    简单的说call,apply都属于Function.prototype的一个方法,它是JavaScript引擎内在实现的,因为属于Function.prototype,所以每个Function对象实例(就是每个方法)都有call,apply属性。既然作为方法的属性,那它们的...

    javascript中call apply 的应用场景

    xxx) 虽然看到书上有介绍 说call和apply函数可以改变作用域,但还是无法非常透彻的理解改变作用域主要是为了解决什么问题,有没有替代方案,或者 这2个函数主要为了解决什么问题,应用场景,何时使用最合适,每次读...

    function.prototype:适用于Function.prototype的Polyfill。{apply,bind,call}

    函数原型polyfill 这是三个基本功能方法填充工具apply , bind和call的 是的,因为它实际上可以兼容*。 你为什么要问? 很好地证明了观点,并展示了您可以使用诸如JavaScript / ECMAScript之类的动态语言来完成的...

    JavaScript中apply方法的应用技巧小结

    方便大家和自己以后使用。下面来一起看看。 一、apply实现call Function.prototype.call = function () { var ctx = [].shift.apply(arguments) return this.apply(ctx, arguments) } 二、apply实现bind ...

    js老生常谈之this,constructor ,prototype全面解析

    前言 javascript中的this,constructor ... 我们还可以使用apply和call两个全局方法来改变函数中this的具体指向。 先看一个在全局作用范围内使用this的例子: console.log(this === window); // true console.log(wind

    JavaScript中几个重要的属性(this、constructor、prototype)介绍

    我们还可以使用apply和call两个全局方法来改变函数中this的具体指向。 先看一个在全局作用范围内使用this的例子: 代码如下: [removed] console.log( === window); console.log(window.alert === .alert); console....

Global site tag (gtag.js) - Google Analytics