学些ES6:类

类(class):

class关键词:

let TestClass = class {};
const instance = new TestClass();

{class Inside {}}

typeof Inside // undefined: block scoped

方法与constructor:

class User {
constructor(id) {this.id = id;}

sayHello(){return ‘hello‘+this.id;}
}
const user = new User(42);

class Foo { constructor() { return Object.create(null); } }

getter setter:

class MyAccount {
get balance() { return this.amount; }

set balance(amount) { this.amount = amount; }
}

也可以这样:

const propertyName = ‘balance‘;
class MyAccount {
get [propertyName]() { return this.amount; }
set [propertyName](amount) { this.amount = amount; }
}

static:

const type = ‘test‘ + ‘Type‘;
class IntegrationTest {
static get [type]() { return ‘integration‘; } // static + get/set + 运行时命名
}

继承:

class A {}
class B extends A{}

function 定义的类也可以被继承:

let A = function (){};
class B extends A {}

isPrototypeOf:

class A {}
class B extends A {}

A.isPrototypeOf(B); // true

A.prototype.isPrototypeOf(new B()) // true

A.prototype.isPrototypeOf(B.prototype) // true

还可以:

let A;

class B extends (A = class {}) {}

class B extends (((beNull) => beNull ? null : class {})(true)) {}

super关键字:

普通方法与构造函数中使用super:

class A {iAmSuper() { return this.youAreSuper; }}
class B extends A {constructor() { super(); this.youAreSuper = true; } }
class C extends B {
iAmSuper() {
return super.iAmSuper();
}
}

class A {constructor(startValue=1, addTo=1) { this.counter = startValue + addTo; }}
class B extends A {
constructor(...args) {
super(...args);
this.counter++;
}
}

判断继承:

// not work for exends null, only for babel or ... ?

class A {hasSuper() { return super.constructor !== Object }}

class A {hasSuper() { return !super.constructor }}

时间: 2024-11-08 23:05:39

学些ES6:类的相关文章

学些ES6:Destructuring

Destructuring: 数组: let [firstValue] = [1]; // firstValue: 1 let c, d;let [a, b] = [c, d] = [1, 2]; var [head, ...tail] = [1, 2, 3, 4]; // tail: [2,3,4] 可以交换变量: let [x, y] = ['ax', 'why'];[x, y] = [y, x]; // x: why, y:ax const all = ['ax', 'why', 'zet

学些ES6:反射

Reflect: 基础: let Class = class {}; Reflect.construct(Class) instanceof Class // true let obj = {x: 23}; Reflect.get(obj, 'x') // 23 Reflect.has(obj, 'x') // true apply: 执行函数: let fn = () => {return 42;}; Reflect.apply(fn) // 42 指定context: class Fourt

学些ES6:generator

Generator: 创建: function* g() {} // g: [object Generator] let g = function*() {}; let obj = {*g() {}}; const generatorName = 'g';let obj = {*[generatorName]() {}}; const generatorName = 'g';class Klazz {*[generatorName]() {}} iterator: const generator

学些ES6:Map

Map: 初始化: const mapSize = (new Map()).size; // mapSize: 0 const pair1 = [1, 'one']; const pair2 = [2, 'two']; const map = new Map([pair1, pair2]); // new Map().set(...pair1).set(...pair2); // 以最后设的值为准: const pair1 = [1, 'one']; const pair2 = [1, 'uno

「01」机器学习,到底在学些什么?

阅读 0 编辑文章 大家好,欢迎来到久违的机器学习系列,这是「美团」算法工程师带你入门机器学习 专栏的第一篇文章,不会太长,一半聊想法,一半聊干货.熟悉我的朋友可能知道,我以前的文章比较随意,涉及的内容极广,包括但不限于Python/Java/C/C++,网络编程,Hadoop等,但主要核心还是机器学习算法和数据科学相关的主题,这一点没变过. 最近认真总结和思考了之前的博客内容,决定将自己从入门到现在一路走来的学习经验和理解整理一番,帮助更多后来的小伙伴更好的入门,所以就有了这个系列.以前的知乎

运维工程师该干什么学些什么?[致菜鸟]

很多刚学linux运维的朋友,总是搞不懂,运维工程师工作中干些啥?学的这些东西有什么用?今日我特来总结总结,希望能帮助即将跨入该行的人形成一个整体的思路.下面红色字体代表所要掌握的LInux免费开源工具. 运维工程师干些什么 总结两句话 1.  保障业务长期稳定运行(如网站服务器.游戏服务器等等). 2.  保障数据安全可靠(如用户名密码.游戏数据.博客文章.交易数据等等). 由这两句话推演运维工程师要学些什么 一.保障业务长期稳定运行 出一点点差错,用户就要投诉了. 1.业务跑在什么上面? 网

2019,全栈开发者应该学些什么

前端 HTML.CSS 和 JavaScript 是必须掌握的,你还需要学习 React.Vue 或 Angular 等前端框架或库.但是,你应该选择哪一个?对于一个真正的全栈开发者,你可以在 2019 年选择这三个框架中的任何一个. 来自 React 16 的更新 你需要了解 React 的基础知识及其基于单向数据流架构的组件.今年我们看到了 React 16 的大量更新和 2019 年即将发布的一些小版本更新. 新的生命周期方法: React 16.6 中的 Suspense for Cod

十余年谷歌大佬的见解:成为算法工程师到底需要学些什么?

人工智能? 感觉这个词很广泛,我之前想把人工智能当成某一项技术来学,但是并没有找到我满意的答案,还是说人工智能本就不是某一项技术? 首先回答一下人工智能到底学什么 1.学习并掌握一些数学知识 高等数学是基础中的基础,一切理工科都需要这个打底,数据挖掘.人工智能.模式识别此类跟数据打交道的又尤其需要多元微积分运算基础线性代数很重要,一般来说线性模型是你最先要考虑的模型,加上很可能要处理多维数据,你需要用线性代数来简洁清晰的描述问题,为分析求解奠定基础 概率论.数理统计.随机过程更是少不了,涉及数据

es5继承和es6类和继承

es6新增关键字class,代表类,其实相当于代替了es5的构造函数 通过构造函数可以创建一个对象实例,那么通过class也可以创建一个对象实列 /* es5 创建一个person 构造函数 */ function person (name,age) { this.name = name this.age = age } /* 定义原型链上的方法sayholle */ /* 为什么要将方法定义在原型上,定义在原型上的方法,所有的实例对象都共享 不会出现没实列一个对象都重新创建一个这个方法 */