ES6 class中的一些问题

记录下class中的原型,实例,super之间的关系

//父类
class Dad {
constructor(x, y) {
this.x = 5;
this.y = 1;
this.state = 789
} static x = 521 state1 = 666 say() {
console.log("父类bark");
}
talk = () => {
console.log("父类talk");
} static speak() {
console.log("父类speak");
console.log(this.state);
}
speak(){
console.log("父类不会speak");
}
}
//子类
class Child extends Dad {
constructor() {
super()
this.x = 987
this.toString = this.toString.bind(this)
} state = {} toString() {
return '(' + this.x + ', ' + this.y + ')';
} toString1 = () => {
return '(' + this.x + ', ' + this.y + ')';
} say = () => {
super.say();
console.log("子类bark");
console.log(super.x);
} talk = () => {
super.talk()
console.log("子类talk");
} static speak() {
super.speak()
console.log("子类speak");
console.log(super.x);
} } console.log(new Child().x); // 输出987
console.log(new Child().y); // 输出1 new Child().say(); // 输出 父类bark 子类bark undefined
new Child().talk(); // 报错 super.talk is not a function Child.speak(); // 父类speak undefined 子类speak 521
  1. 构造器中的this指向实例对象,在构造函数上定义的属性和方法相当于定义在类实例上的,而不是原型对象上

  2. 子类的toString方法是挂载到原型上的,toString1是挂载到每个实例上的

  3. this.toString.bind(this),前面的this是不确定的,取决于调用方式;

    后面的this指实例对象,这行代码目的是为了固定toString方法的this为实例对象,避免函数赋值给变量时this丢失

  4. super关键字用于访问和调用一个对象的父对象上的函数

  5. super作为函数使用,调用的是父类的构造函数,而其中的this指向子类自己(用父类的方法操作自己的东西)

  6. super 作为对象时,在普通方法中,指向父类的原型对象(只能访问原型上的函数,无法访问属性);在静态方法中,指向父类本身(调用的是父类的静态方法或属性),但是this指向子类。

ES6中class方法及super关键字的更多相关文章

  1. es6 class 中 constructor 方法 和 super

    首先,ES6 的 class 属于一种“语法糖”,所以只是写法更加优雅,更加像面对对象的编程,其思想和 ES5 是一致的. <1>constructor function Point(x, ...

  2. ES6之class 中 constructor 方法 和 super 的作用

    首先,ES6 的 class 属于一种“语法糖”,所以只是写法更加优雅,更加像面对对象的编程,其思想和 ES5 是一致的. function Point(x, y) { this.x = x; thi ...

  3. 浅谈Java泛型中的extends和super关键字(转)

    通配符 在本文的前面的部分里已经说过了泛型类型的子类型的不相关性.但有些时候,我们希望能够像使用普通类型那样使用泛型类型: 向上造型一个泛型对象的引用 向下造型一个泛型对象的引用 向上造型一个泛型对象 ...

  4. 浅谈Java泛型中的extends和super关键字

    泛型是在Java 1.5中被加入了,这里不讨论泛型的细节问题,这个在Thinking in Java第四版中讲的非常清楚,这里要讲的是super和extends关键字,以及在使用这两个关键字的时候为什 ...

  5. Java泛型中的extends和super关键字

    理解List<? extends T> list, T key, Comparator<? super T> c 这些一般用在方法形参类型上,用于接受泛型对象. 1.List& ...

  6. es6中find方法

    find() 方法返回数组中满足提供的测试函数的第一个元素的值.否则返回 undefined. , , , , ]; var found = array1.find(function(element) ...

  7. ES6中构造函数内super关键字的使用

    super关键字用于访问和调用一个对象的父对象上的函数. super.prop和super[expr]表达式在类和对象字面量任何方法定义中都是有效的. 语法 super([arguments]); / ...

  8. es6(五):class关键字(extends,super,static)

    ES5中,生成对象通过构造函数: function A(name,age){ this.name=name; this.age=age } // 在A的prototype属性上定义一个test方法,即 ...

  9. es6 super关键字

    rhttp://es6.ruanyifeng.com/#docs/class-extends super关键字,既可以当作函数使用,也可以当作对象使用.这俩种的使用是不一样的 第一种:函数使用 代表父 ...

随机推荐

  1. 从 rails 窥探 web 全栈开发(零)

    从 rails 窥探 web 全栈开发(零) 本文将讲述在学习之前几个必须要知道的概念,这些词汇在 rails 中都会出现. 本文前置条件:安装好 Ruby. 从 rails 窥探 web 全栈开发( ...

  2. 聊聊C#中的Visitor模式

    写在前面 Visitor模式在日常工作中出场比较少,如果统计大家不熟悉的模式,那么它榜上有名的可能性非常大.使用频率少,再加上很多文章提到Visitor模式都着重于它克服语言单分派的特点上面,而对何时 ...

  3. C# settings 文件基础用法

    原文 自定义设置项类型 Serializable 修饰的枚举,可作为设置项类型 [Serializable] public enum DeviceBrand { None = 0, [Descript ...

  4. 【系统】查看windows系统是否永久激活

    查看windows系统是否永久激活 查看激活时间 slmgr.vbs -xpr 查看激活详情 slmgr.vbs -dlv

  5. 如何在 pyqt 中自定义工具提示 ToolTip

    前言 Qt 自带的工具提示样式不太好看,就算加了样式表也时不时会失效,同时工具提示没有阴影,看起来就更难受了.所以本篇博客将会介绍自定义工具提示的方法,效果如下图所示: 实现过程 工具提示其实就是一个 ...

  6. 《HelloGitHub》第 74 期

    兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣.入门级的开源项目. https://github.com/521xueweiha ...

  7. IOI2020 国家集训队作业 泛做

    题号 题目名称 rating 算法 完成情况 CF504E Misha and LCP on Tree CF505E Mr.Kitayuta vs. Bamboos CF506E Mr.Kitayut ...

  8. 制造企业信息化时代,SaaS系统下沉,移动端上升

    这个时代,我们是不是有很多岗位一定是要在电脑前面完成?如果我们让部分岗位的办公室人员离开电脑,让他们通过移动端来完成工作,这又会产生出一个什么样的变化?是否意味着可以有更多的时间在一线生产制造现场,从 ...

  9. 分享一个网上搜不到的「Redis」实现「聊天回合制」的方案

    前言 为什么说网上搜不到,因为关于聊天回合制的方案作者本人快把百度搜秃噜了也没找到,好在最终是公司一个关系不错的大佬帮提供了点思路,最终作者将其完整实现了出来. 分享出来大家可以收藏,万一你哪天也碰到 ...

  10. Linux定时任务--Crond使用教程

    Linux定时任务--Crond使用教程 1. 介绍Crond crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后 ...