this的动态切换,固然为 JavaScript 创造了巨大的灵活性,但也使得编程变得困难和模糊。有时,需要把this固定下来,避免出现意想不到的情况。JavaScript 提供了callapplybind这三个方法,来切换/固定this的指向。

 1 1、函数实例的call方法,可以指定函数内部this的指向(即函数执行时所在的作用域),然后在所指定的作用域中,调用该函数。
2 var obj = {};
3
4 var f = function () {
5 return this;
6 };
7
8 f() === window // true
9 f.call(obj) === obj // true
10
11
12 2、apply方法的作用与call方法类似,也是改变this指向,然后再调用该函数。唯一的区别就是,它接收一个数组作为函数执行时的参数,使用格式如下。
13 function f(x, y){
14 console.log(x + y);
15 }
16
17 f.call(null, 1, 1) // 2
18 f.apply(null, [1, 1]) // 2
19
20 3、bind()方法用于将函数体内的this绑定到某个对象,然后返回一个新函数。
21 var counter = {
22 count: 0,
23 inc: function () {
24 this.count++;
25 }
26 };
27
28 var func = counter.inc.bind(counter);
29 func();
30 counter.count // 1

ES5 绑定 this 的方法的更多相关文章

  1. jquery 绑定事件的方法

    jQuery中提供了四种绑定事件的方法,分别是bind.live.delegate.on,对应的解除监听的函数分别是unbind.die.undelegate.off: 一.on()方法(首选方法) ...

  2. JavaScript绑定事件的方法[3种]

    在JavaScript中,有三种常用的绑定事件的方法: 在DOM元素中直接绑定: 在JavaScript代码中绑定: 绑定事件监听函数. 一. 在DOM元素中直接绑定 这里的DOM元素,可以理解为HT ...

  3. 《JS权威指南学习总结--7.9 ES5中的数组方法》

    内容要点: ES5中定义了9个新的数组方法来遍历.映射.过滤.检测.简化和搜索数组. 概述:首先,大多数方法的第一个参数接收一个函数,并且对数组的每个元素(或一个元素)调用一次该函数. 如果是稀疏数组 ...

  4. GridView等表格模板列绑定数据的方法

    //绑定GridView每一行中的CheckBoxList protected void GridView1_RowDataBound(object sender, GridViewRowEventA ...

  5. elementui command绑定变量对象方法

    command绑定变量对象方法 使用v-bind : command绑定 简写 :command

  6. Android studio button 按钮 四种绑定事件的方法

    package com.geli_2.sujie.sujiegeili2testbutton; import android.os.Bundle; import android.support.v7. ...

  7. JavaScript中,有三种常用的绑定事件的方法

    要想让 JavaScript 对用户的操作作出响应,首先要对 DOM 元素绑定事件处理函数.所谓事件处理函数,就是处理用户操作的函数,不同的操作对应不同的名称. 在JavaScript中,有三种常用的 ...

  8. SpringMVC3,使用RequestMappint的Param参数,实现一个url绑定多个方法

    SpringMVC中,默认不能把多个相同的url绑定到同一个方法.如果需要绑定,需要增加param参数,而且值要不同. 我自己没有这个需求,或者就是有需求,我也想到的是使用不同的url. 项目中有少部 ...

  9. Linux 绑定 ttyUSBn 串口方法。

    Linux 绑定 ttyUSBn 串口方法. 在linux下, 使用usb转串口, 经常会碰到一个问题: 如果有多个串口, 以不同顺序插入的时候, /dev/ttyUSB0 /dev/ttyUSB1的 ...

  10. 25 JavaScript对象原型&ES5新的对象方法

    JavaScript对象原型 所有JavaScript对象都从原型继承对象和方法 日期对象继承自Date.prototype,数组继承自Array.prototype,对象构造器新建的对象Person ...

随机推荐

  1. C#DataTable(转List /JSON/字典 互转)

    1 #region 数据表DataTable 转键值对集合 List 2 /// <summary> 3 /// 数据表DataTable 转键值对集合 List 4 /// 把DataT ...

  2. @EnableDiscoveryClient和@EnableEurekaClient springboot3.x

    @EnableDiscoveryClient和@EnableEurekaClient 将一个微服务注册到Eureka Server(或其他服务发现组件,例如Zookeeper.Consul等)的步骤 ...

  3. JAVA虚拟机13-字节码指令简介

    1.简介 Java虚拟机的指令由一个字节长度的.代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的零至多个代表此操作所需的参数(称为操作数,Operand)构成.JVM指令=1字节 ...

  4. 【已解决】SQL2012启动时报错:cannot find one or more cpmponents

    下载Microsoft Visual Studio 2010 Shell(Isolate)-CHS安装即可 下载地址:Visual Studio 独立 Shell 下载及安装:点击同意许可,选择vs2 ...

  5. 体验AI乐趣:基于AI Gallery的二分类猫狗图片分类小数据集自动学习

    摘要:直接使用AI Gallery里面现有的数据集进行自动学习训练,很简单和方便,节约时间,不用自己去训练了,AI Gallery 里面有很多类似的有趣数据集,也非常好玩,大家一起试试吧. 本文分享自 ...

  6. P4238 【模板】多项式乘法逆

    #include <cstdio> #include <iostream> #define re register using namespace std; typedef l ...

  7. JZOJ 5372. 【NOIP2017提高A组模拟9.17】猫

    题目大意 对于 \(m = [1,\lfloor \frac n 2 \rfloor]\) 要求在一个序列中恰好选出 \(m\) 个不相邻的数使得权值和最大 其中 \(1\) 的左边是 \(n\),\ ...

  8. CPU AMX 详解

    CPU AMX 详解 CPU AMX 详解 概述 算力如何 问题定义 AVX如何解决矩阵乘问题 AMX如何解决矩阵乘问题 如何实现的 计算部分 数据部分 路才开始 概述 2016 年开始,随着 NV ...

  9. Ubuntu18完全卸载php7.2

    转载csdn: Ubuntu18完全卸载php7.2_yisonphper的博客-CSDN博客_ubuntu 卸载php8

  10. Iceberg 数据治理及查询加速实践

    数据治理 Flink 实时写入 Iceberg 带来的问题 在实时数据源源不断经过 Flink 写入的 Iceberg 的过程中,Flink 通过定时的 Checkpoint 提交 snapshot ...