js-ES6学习笔记-Class(6)
1、类相当于实例的原型,所有在类中定义的方法,都会被实例继承。如果在一个方法前,加上static
关键字,就表示该方法不会被实例继承,而是直接通过类来调用,这就称为“静态方法”。
2、父类的静态方法,可以被子类继承。静态方法也是可以从super
对象上调用的。
3、静态属性指的是Class本身的属性,即Class.propname
,而不是定义在实例对象(this
)上的属性。
ES6明确规定,Class内部只有静态方法,没有静态属性。
// 以下两种写法都无效 class Foo {// 写法一prop: 2// 写法二static prop: 2 }Foo.prop // undefined
4、ES7有一个静态属性的提案,目前Babel转码器支持。
这个提案对实例属性和静态属性,都规定了新的写法。
(1)类的实例属性——类的实例属性可以用等式,写入类的定义之中。
class ReactCounter extends React.Component {constructor(props) {super(props);this.state = {count: 0};} }
上面代码中,构造方法constructor
里面,定义了this.state
属性。
有了新的写法以后,可以不在constructor
方法里面定义。
class ReactCounter extends React.Component {state = {count: 0}; }
(2)类的静态属性
类的静态属性只要在上面的实例属性写法前面,加上static
关键字就可以了。
5、目前,有一个提案,为class
加了私有属性。方法是在属性名之前,使用#
表示。
6、new
是从构造函数生成实例的命令。ES6为new
命令引入了一个new.target
属性,(在构造函数中)返回new
命令作用于的那个构造函数。如果构造函数不是通过new
命令调用的,new.target
会返回undefined
,因此这个属性可以用来确定构造函数是怎么调用的。
function Person(name) {if (new.target !== undefined) {this.name = name;} else {throw new Error('必须使用new生成实例');} }// 另一种写法 function Person(name) {if (new.target === Person) {this.name = name;} else {throw new Error('必须使用new生成实例');} }var person = new Person('张三'); // 正确 var notAPerson = Person.call(person, '张三'); // 报错
Class内部调用new.target
,返回当前Class。需要注意的是,子类继承父类时,new.target
会返回子类。
利用这个特点,可以写出不能独立使用、必须继承后才能使用的类。
class Shape {constructor() {if (new.target === Shape) {throw new Error('本类不能实例化');}} }class Rectangle extends Shape {constructor(length, width) {super();// ... } }var x = new Shape(); // 报错 var y = new Rectangle(3, 4); // 正确
7、Mixin模式指的是,将多个类的接口“混入”(mix in)另一个类。可以将多个对象合成为一个类。使用的时候,只要继承这个类即可。
转载于:https://www.cnblogs.com/zczhangcui/p/6550570.html
js-ES6学习笔记-Class(6)相关推荐
- ES6学习笔记(三):教你用js面向对象思维来实现 tab栏增删改查功能
前两篇文章主要介绍了类和对象.类的继承,如果想了解更多理论请查阅<ES6学习笔记(一):轻松搞懂面向对象编程.类和对象>.<ES6学习笔记(二):教你玩转类的继承和类的对象>, ...
- ES6学习笔记(五):轻松了解ES6的内置扩展对象
前面分享了四篇有关ES6相关的技术,如想了解更多,可以查看以下连接 <ES6学习笔记(一):轻松搞懂面向对象编程.类和对象> <ES6学习笔记(二):教你玩转类的继承和类的对象> ...
- ES6学习笔记04:Set与Map
ES6学习笔记04:Set与Map JS原有两种数据结构:Array与Object,ES6新增两种数据结构:Set与Map 一.Set数据结构 Set类似于数组,但是成员值不允许重复,因此主要用于数据 ...
- es6学习笔记-顶层对象_v1.0_byKL
es6学习笔记-顶层对象_v1.0 (虽然是笔记,但是基本是抄了一次ruan大师的文章了) 顶层对象 顶层对象,在浏览器环境指的是window对象,在Node指的是global对象. ES5之中,顶层 ...
- js/jquery学习笔记
javascript简介 JavaScript是一种基于对象和事件驱动并具有相对安全性的客户端脚本语言. 不同于服务器端脚本语言,例如PHP与ASP,JavaScript是客户端脚本语言,也就是说Ja ...
- es6学习笔记-字符串的扩展_v1.0_byKL
es6学习笔记-字符串的扩展_v1.0 字符的Unicode表示法 JavaScript 允许使用uxxxx的形式表示一个字符,但在 ES6 之前,单个码点仅支持u0000到uFFFF,超出该范围的必 ...
- 【带着canvas去流浪(11)】Three.js入门学习笔记
[摘要] three.js 入门学习笔记 示例代码托管在:http://www.github.com/dashnowords/blogs 一. 资料推荐及建议 1.官方文档 很详细,但是API部分单独 ...
- ES6学习笔记03:变量的解构赋值
ES6学习笔记03:变量的解构赋值 如果想从复杂数据结构(数组.对象)中获取某一个数据,可能需要大量的遍历操作才能完成.通过解构赋值,这一过程可以得到简化. 1.字符串的解构赋值 其实,Python也 ...
- ES6学习笔记02:let 与 const
ES6学习笔记02:let 与 const 用var声明的变量会造成全局污染,于是就产生了新的声明方式. 1.let 用let声明变量,必须先声明后使用. 在for循环头里用let定义循环变量i,那么 ...
- ES6学习笔记01:Symbol数据类型
ES6学习笔记01:Symbol数据类型 1.Symbol定义 浏览demo01.html: 2.Symbol作对象属性名 Symbol函数可以接收一个字符串作为参数,表示对Symbol实例的描述,输 ...
最新文章
- flutter 人脸检测_【转载】opencv实现人脸检测
- Java实现算法导论中线性规划单纯形算法
- Kibana安装及简单使用
- 1、深入理解计算机系统 笔记,系统综述
- 构建消费者数据平台(CDP),实现全域消费者数字化运营闭环
- Hadoop集群部署模型纵览1
- animation的6个属性
- hexo的yelee主题修改左上角的博客名字颜色、修改代码模块中的引号内部的字体颜色
- unlegal android,cordova-plugin-baidumaplocation百度地图定位Cordova插件
- 移动 Azure 资源后如何快速修复 Dashboard
- 浅谈OpenCL之Platform API(1)
- 用cmd来向mysql导入sql文件
- TensorFlow——如何查看当前版本TF编译使用的CUDA和cuDNN的编译版本
- 今天遇到的一个诡异的core和解决 std::sort
- pythoncanny边缘检测自适应阈值_一种自适应阈值的Canny边缘检测算法
- arm9处理器 java_ARM处理器系列介绍
- linux jnlp 远程,OpenJDK “IcedTea”插件JNLPSecurityManager远程代码执行漏洞
- 【历史上的今天】10 月 17 日:微软发布 Windows 8.1;IMDb 成立;海盗湾创始人诞生
- 计算机领域区块链是什么是意思,为什么区块链瑞普顿RXP是不可篡改的
- 【设计模式】一、是什么,为什么,怎么学
热门文章
- 转载~final, static和 nested class 总结 原文~http://yulin10.bokee.com/2544792.html
- CSS 媒体类型 ,相应式布局使用
- 再谈删除数据的SQL语句
- 认识![CDATA[ ]]
- MEncoder的基础用法—6.2. 选择输入文件或设备
- 页面优化必须知道的技能:meta标签中的http-equiv属性使用介绍
- 解决Adobe Flash Player不是最新版本方法
- 微服务学习之Hystrix容错保护【Hoxton.SR1版】
- 计算机管理创建超级用户,win10家庭版怎么开启Administrator超级管理员帐户
- android的简单知识,Android基础知识(简单实例计算器)