第一次在博客园上面写博客,知识因为看书的时候发现了一些有意思的知识,顺便查了一下资料,就发到博客上来了,希望对大家有点帮助。  

  连续几天阅读《javascript高级程序设计》这本书了,逐渐发现了以前很多自己完全没有用过甚至见过的神奇知识点。今天在阅读到有关函数的属性和方法的时候,略感高级,于是乎,查阅了不少他人的博客,在此总结一下这两个方法的以下几个方面:

1.call()和apply()的作用和用法
2.什么时候用apply(),什么时候用call()

  书上提到,每个函数都包含两个非继承而来的方法:apply和call,他们的作用都是将函数绑定到另外一个对象上去运行,也就是说,这两个方法的用途都是在特定的作用域中调用函数,调用的时候,设置了函数体内this对象的值。首先展示一下它们的用法: 

 fun.apply(thisArg[, argsArray]);
fun.call(thisArg[, arg1[, arg2[, ...]]]);

可以看出,apply与call的区别是第二个参数不同。apply是  数组或者arguments 对象。而call是逗号隔开的任何类型。为了更直观地展示这两个方法的用法,先举一个例子:

 <script type="text/javascript">
window.color = "red";
var colorSet = {
color : "gray"
}
function showColor() {
alert(this.color);
}
showColor(); //red showColor.call(this); //red
showColor.call(window); //red
showColor.call(colorSet); //gray
</script>

这里先介绍以下this指针的概念:在javascript里面,this指针代表执行当前代码的对象所有者。在非严格模式下,未指定环境对象而调用函数,this指针值不会转型为window。当执行上面的代码的第9行的时候,所在的执行环境是全局环境,对象所有者是window,而window对象有一个color属性,因而得到的结果是red。至于11和12行,就是显示调用了window。接下来的13行就是上面代码的关键了,当运行showColor.call(colorSet);的时候,函数的执行环境不一样了,此时函数体内的this指针指向了对象colorSet,于是结果显示的就是colorSet的color属性。

本文主要参考了一下博客:

http://blog.csdn.net/myhahaxiao/article/details/6952321

Javascript中call方法和apply方法用法和区别的更多相关文章

  1. 理解JavaScript中的call和apply方法

    call方法 总的来说call()有这几种作用:1.可以借用另一个对象的方法.2.改变this的指向(重要).3.将arguments数组化.下面详细介绍这三种作用: 1.可以借用另一个对象的方法:当 ...

  2. javascript中的call()和apply()方法的使用

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

  3. 浅谈javascript中的call与apply方法

    call方法与apply方法都是为了改变函数体内部this的指向. call方法与apply方法,这二者的作用完全一样,只是接受参数的方式不太一样. apply()方法: Function.apply ...

  4. JavaScript中的call 和apply的用途以及区别

    apply 接受两个参数,第一个参数指定了函数体内this 对象的指向,第二个参数为一个带下标的集合,这个集合可以为数组,也可以为类数组,apply 方法把这个集合中的元素作为参数传递给被调用的函数: ...

  5. 深入了解angularjs中的$digest与$apply方法,从区别聊到使用优化

     壹 ❀ 引 如果有人问,在angularjs中修改模型数据为何视图会同步更新呢,我想大多数人一定会回答脏检查(Dirty Checking)相关概念.没错,在angularjs中作用域(scope) ...

  6. 浅谈javascript中的call()和apply()方法

    话说在js中,每个函数都包含两个非继承而来的放方法,apply()和call(),使得我们能在特定的作用域中调用函数. 官方定义: 语法:       fun.call(thisArg[, arg1[ ...

  7. 关于JAVASCRIPT call 方法和 apply 方法性能对比

    JavaScript 关于call 方法和 apply 方法常用形式 call obj.call(object, args , ....); apply obj.apply(object, [args ...

  8. JS中的call()方法和apply()方法用法总结

    原文引自:https://blog.csdn.net/ganyingxie123456/article/details/70855586 最近又遇到了JacvaScript中的call()方法和app ...

  9. JS中的call()方法和apply()方法用法总结(挺好 转载下)

    最近又遇到了JacvaScript中的call()方法和apply()方法,而在某些时候这两个方法还确实是十分重要的,那么就让我总结这两个方法的使用和区别吧. 1. 每个函数都包含两个非继承而来的方法 ...

随机推荐

  1. 简单理解 NP, P, NP-complete和NP-Hard

    P是一类可以通过确定性图灵机(以下简称 图灵机)在多项式时间(Polynomial time)内解决的问题集合. NP是一类可以通过非确定性图灵机( Non-deterministic Turing ...

  2. base64 与字符串互转

    #region 将Base64编码的文本转换成普通文本 /// <summary> /// 将Base64编码的文本转换成普通文本 /// </summary> /// < ...

  3. erp前端项目总结

    目录 一.项目目录(vue-cli2) 二.开发实践 (一) 权限 (二) 各组件间传递数据 (四) 路由 (七) 组织部门业务员三级联动 (八) 优化性能,手动绑定下拉框数据 (九) 验证 (十) ...

  4. 查看linux系统的信息

    #!/bin/sh ################################################## #function:get host's information #Autho ...

  5. 配置子目录Web.config使其消除继承,iis7.0设置路由

    iis7.0设置路由 ,url转向,伪静态 <system.webServer>      <modules runAllManagedModulesForAllRequests=& ...

  6. 莫烦课程Batch Normalization 批标准化

    for i in range(N_HIDDEN): # build hidden layers and BN layers input_size = 1 if i == 0 else 10 fc = ...

  7. python字典解析

    import json # coding: utf-8 from functools import singledispatch from collections import abc import ...

  8. 12 Release History for go go语言的版本历史

    Release History Release Policy go1.11 (released 2018/08/24) go1.10 (released 2018/02/16) Minor revis ...

  9. geoserver 启动闪退

    跟JDK版本有关: 比如geoserver2.11需要JDK版本为JDK1.8 windows配置两个jdk环境: 网上有方法,但如果只需要满足geoserver的话,可以只安装jdk(注意jdk和j ...

  10. 统计学习方法九:EM算法

    一.EM算法是什么? EM算法是一种迭代算法,用于含有隐变量的概率模型参数的极大似然估计. 作用:简单直白的说,估计参数 是一种生成模型 (1)用在概率模型中 (2)含有隐变量 (3)用极大似然估计方 ...