关于javascript中的call方法。总结网上的观点:

1: 继承。

2: 修改函数运行时的this指针。

可能说起来还是比较抽象,下面具体例子说一下:

 x.call(y)

 (1)y.m = x    将x作为y的某个属性(比如这里的m)存储

 (2)m();    执行m

 (3)delete m();     执行完毕,删除m();

1.继承:

举一个更具体的例子:

  function x () {

    var a = 'name';

    this.b = 'test1';

    this.add = function () { return 'add' }

  }

  function y (){

    this.c = 'c';  

  }

  x.call(y);

  x.call(y)等价于:  

  function y () {

    this.c = 'c';    //这一段相当于 function y()

    var a ='name';

    this.b = 'test1';

    this.add = function () { return 'add' }   //这一段相当于function x()  

  }   //执行完此函数后立即删除

此时,this的作用域( 不是定义它的函数的作用域,而是执行时的作用域 ),发生了变化,this代表的都是y(),即使它是x中的方法和属性。this在这个时候代表的是执行作用域B,这样也实现了继承

2:修改函数运行时候的this指针

 

(1)第一种调用fn方法,由于没定义它的执行作用域,输出的this代表windows对象(全局对象)。

(2)第二种运用了fn.call(.....),将fn的执行作用域放在了array[index],array[index]执行,此时的this代表array[index]对象。

js中的call与apply随笔的更多相关文章

  1. js笔记——理解js中的call及apply

    call及apply在js里经常碰得到,但一直感觉很陌生,不能熟练使用.怎样才能熟练应用呢? 为什么存在call和apply? 在javascript OOP中,我们经常会这样定义: function ...

  2. JS中的call、apply、bind方法

    JS中的call.apply.bind方法 一.call()和apply()方法 1.方法定义 call方法: 语法:call([thisObj[,arg1[, arg2[,   [,.argN]]] ...

  3. 关于 js 中的 call 和 apply使用理解

    关于 js 中的 call 和 apply使用理解 在学习新的东西时候,碰到以前看过而又不理解,或则记忆不深的地方不妨回头看看书里知识点,有助于加深理解.正所谓--温故而知新. 废话不多说,直接上代码 ...

  4. 快速理解js中的call,apply的作用

    今天被人问到js中的call,apply的区别和用途,解释了一番后,想到之前在逼乎上看到一位小伙伴生动形象的解释 本身不难理解,看下MDN就知道了,但是不常用,遇到了,还要脑回路回转下.或者时间长了, ...

  5. JS中的call()和apply()方法(转)

    转自:http://uule.iteye.com/blog/1158829 JS中的call()和apply()方法 博客分类: JS   1.方法定义 call方法: 语法:call([thisOb ...

  6. JS中的call()和apply()方法

    1.方法定义 call方法: 语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call ...

  7. js中的call()与apply()

    js中的call()函数和apply()函数: 1.主要作用:是用于指定作用域和传参 (1)用于指定作用域 window.color = "red"; var o = { colo ...

  8. JS中的call()和apply()方法理解和使用

    1.方法定义call方法: 语法:obj.method.call(thisObj[,arg1[, arg2[, [,.argN]]]]) 定义:调用对象(obj)的一个方法(method),以另一个对 ...

  9. 理解JS中的call、apply、bind方法(*****************************************************************)

    在JavaScript中,call.apply和bind是Function对象自带的三个方法,这三个方法的主要作用是改变函数中的this指向. call.apply.bind方法的共同点和区别:app ...

随机推荐

  1. 大雄玩java虚拟机01--java命令

    首先是参考的资料,然后说一下我要干什么,我要一边学习java虚拟机一边跟着zxh0大神用go写一个jvm,不过我和他滴不一样! http://docs.oracle.com/javase/specs/ ...

  2. xpath 在firefox,chrome中正常,在requests中不正常的解决。

    经多次测试发现: lxml中的etree格式化以后,直接使用firefox或chrome提取的xpath检索不到内容. 主要是因为tbody # 车种xpathczxx = '/html/body/t ...

  3. Triangle Count

    Given an array of integers, how many three numbers can be found in the array, so that we can build a ...

  4. 字符串的顺序倒置。(Reverse)

    实际遇到的问题:在串口获取码表数据的时候,有的码表传到电脑上的数字顺序是颠倒的,即:123.45,会显示为54.321.需要重新处理数据.方法很多,也不难实现,现在列举其中5个. public str ...

  5. Laravel 1071 Specified key was too long

    出现错误 SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key len ...

  6. 关于Flex布局

    Flex是Flexible Box的缩写,意为“弹性布局”.弹性布局提供了一种更加有效的方式来对一个容器内的项目进行排列/对齐/分配空间等操作,让盒模型具有更大的灵活性.在一个容器盒子上添加displ ...

  7. python-之-深浅拷贝一

    深浅拷贝 一.数据为不可变类型 (str.int.bool) import copy v1 = "abc" v2 = copy.copy(v1) v3 = copy.deepcop ...

  8. java 反射与其应用

    前言: 目标:对于我个人而言 我希望能由以下途径达到最终目标  清楚反射的概念以及为什么要用反射技术 -> java的反射技术 -> java反射技术涉及到的类 -> java反射技 ...

  9. python入门之小栗子

    1 点球小游戏: from random import choice score=[0,0]direction=['left','center','right'] def kick(): print ...

  10. 异构去堆叠 | 一种完美提升网络高可用SLA的方案

    行业内接入网络去堆叠已经逐步成为主流方向,在大型互联网公司也已经批量部署.但由于京东集团不同的业务需求及历史原因,没有条件完全复制目前主流的ARP转主机路由方式的去堆叠方案,这促使我们设计一种尽可能满 ...