1. class Btn{ //定义的一个类

  constructor(id){

// constructor是一个构造函数,是一个默认方法,通过 new 命令创建对象实例时,自动调用该方法。一个类必须有 constructor 方法,如果没有显式定义,一个默认的 consructor 方法会被默认添加。

    this.btn = document.querySelector(id); //这里的this指向了实例对象btn

  }

  click(){

    console.log(this); //因为this是指向了实例对象btn,所以输出的是传进的参数input

  } 

}

var btn = new Btn('input');

2.class Btn{

  constructor(id){

    this.btn = document.querySelector(id); //指向的是实例对象

    this.btn.onclick = this.click;

   }

  click(){

    console.log(this);

//这里不点击btn的情况下输出的是div,因为这个this也被第二个实例对象div给调用了,谁调用this就指向谁。

当你点击btn事这里的this指向btn,因为在构造函数里面btn调用了click这个方法,点击btn输出的是input

  }

}

var btn = new Btn('input');

var div = new Btn('div'); //这是第二个实例对象

div.click(); //调用div的这个实例对象

3. class Btn{

  constructor(x,y){

    this.x = x;

    this.y = y;

    this.btn = document.querySelector('input');//指向的实例对象

    this.btn.onclick = this.click;

  }

  click(){

    console.log(this);

    //这里的this指向的是btn,在构造函数btn调用了click这个方法

    console.log(this.x+this.y);

    //这里输出的是NaN,因为这里的this被btn调用,btn里没有x和y

  }

}

var bbn = new Btn(10,2);

var that;

4. class Btn{

  constructor(x,y){

    that = this;

    this.x = x;

    this.y = y;

    this.btn=document.querySelecctor('input');

    this.btn.onclick = this.click;

  }

  click(){

    console.log(this);

//这里的this指向的是btn,在构造函数btn调用了click这个方法

    console.log(that.x+that.y); //这里会输出12

//因为这里this指向了btn,所以需要用到constructor里面的this,如果用this会输出NaN,用that声明一个全局变量,这里就用that代替this

  }

}

var bbn = new Btn(10,2);

通俗易懂浅谈理解ES6类this不同指向问题的更多相关文章

  1. js原型浅谈理解

    之前在学习原型(prototype)的时候,一直对原型的理解不是很清晰,只是知道每个对象都有一个原型,然后在js中万物又皆对象.在这里谈一下自己对于js原型的简单理解吧. 原型可以实现属性和方法的共享 ...

  2. 浅谈js的类数组对象arguments

    类数组对象:arguments总所周知,js是一门相当灵活的语言.当我们在js中在调用一个函数的时候,我们经常会给这个函数传递一些参数,js把传入到这个函数的全部参数存储在一个叫做arguments的 ...

  3. (C++)浅谈多态基类析构函数声明为虚函数

    主要内容: 1.C++类继承中的构造函数和析构函数 2.C++多态性中的静态绑定和动态绑定 3.C++多态性中析构函数声明为虚函数 1.C++类继承中的构造函数和析构函数 在C++的类继承中, 建立对 ...

  4. 浅谈Perl的类、包、模块与面对对象编程

    http://blog.chinaunix.net/uid-27464093-id-3308003.html Perl面向对象 Perl面向对象学习例子实例代码教程 - 在我们了解perl的面向对象的 ...

  5. 【JAVA】浅谈java枚举类

    一.什么情况下使用枚举类? 有的时候一个类的对象是有限且固定的,这种情况下我们使用枚举类就比较方便? 二.为什么不用静态常量来替代枚举类呢? public static final int SEASO ...

  6. 浅谈Java工具类CommonUtils的使用

    package com.xushouwei.cn; import java.util.HashMap; import java.util.Map; import org.junit.Test; imp ...

  7. 浅谈java枚举类

    一.什么情况下使用枚举类? 有的时候一个类的对象是有限且固定的,这种情况下我们使用枚举类就比较方便? 二.为什么不用静态常量来替代枚举类呢? public static final int SEASO ...

  8. 线程池+同步io和异步io(浅谈)

    线程池+同步io和异步io(浅谈) 来自于知乎大佬的一个评论 我们的系统代码从同步方式+线程池改成异步化之后压测发现性能提高了一倍,不再有大量的空闲线程,但是CPU的消耗太大,几乎打满,后来改成协程化 ...

  9. 【微信小程序项目实践总结】30分钟从陌生到熟悉 web app 、native app、hybrid app比较 30分钟ES6从陌生到熟悉 【原创】浅谈内存泄露 HTML5 五子棋 - JS/Canvas 游戏 meta 详解,html5 meta 标签日常设置 C#中回滚TransactionScope的使用方法和原理

    [微信小程序项目实践总结]30分钟从陌生到熟悉 前言 我们之前对小程序做了基本学习: 1. 微信小程序开发07-列表页面怎么做 2. 微信小程序开发06-一个业务页面的完成 3. 微信小程序开发05- ...

随机推荐

  1. windows10开机后恢复关机前打开的chrome网页

    开始-设置-账户-登录选项-隐私,下面一个"更新或重启后--"即第二个开关打开. 这时,无论是重启.更新重启或关机后开机,均可恢复原关机时的网页(和应用). 注:题主安装的wind ...

  2. Python下的图像处理库,你选哪个?

    奥里给~ 转载:https://blog.csdn.net/chen801090/article/details/105795068/ 在进行数字图像处理时,我们经常需要对图像进行读取.保存.缩放.裁 ...

  3. Eclipse 设置Tab键为4个空格

    参考:java编程规范之eclipse设置tab键为四个空格 Eclipse版本 1.点击菜单Window > Preference 2.在Preferences窗口中,展开General &g ...

  4. 不会吧,这也行?iOS后台锁屏监听摇一摇

    目录 背景介绍 探索过程 其他 APP 有没有类似功能 系统提供的摇一摇回调能否满足 其他方法能否实现 利用 CoreMotion 框架,监听加速计原始数据 通过加速计监听摇一摇 控制器相关逻辑和代码 ...

  5. .NET Standard 版本支持

    系列目录     [已更新最新开发文章,点击查看详细] .NET标准已版本化.每个新版本都添加了更多的api.当库是针对某个.NET标准版本构建的时,它可以在实现该版本的.NET标准(或更高版本)的任 ...

  6. Codeforces Global Round 11 个人题解(B题)

    Codeforces Global Round 11 1427A. Avoiding Zero 题目链接:click here 待补 1427B. Chess Cheater 题目链接:click h ...

  7. 《New Horizon College English》2--长篇阅读技能指南

    <New Horizon College English>2--长篇阅读技能指南 <长篇阅读>目的是提升学生的英语阅读技能和限时获取信息的能力.<长篇阅读>共四级, ...

  8. CMD/ENTROYPOINT区别

    CMD/ENTROYPOINT区别 相同点:都是指定一个容器:启动时要运行的命令 不同点(重点): CMD: dockerfile中可以有多个CMD指令,但是只有最后一个生效,CMD会被docker ...

  9. 2017-18一《电子商务概论》本科作业-商A1551

    第1次作业: 1 2017年双十一新营销方案 2 销售额达1682亿元分析组成及了解猫狗大战 3 破亿店铺举例. 第2次作业: 1.你如何来定义和理解电子商务?电子商务对社会经济带了怎样的影响,企业. ...

  10. 多测师讲解python _练习题003_高级讲师肖sir

    python 003作业题:# 1.分别打印100以内的所有偶数和奇数并存入不同的列表当中# 2.请写一段Python代码实现删除一个list = [1, 3, 6, 9, 1, 8]# 里面的重复元 ...