在ES2015中,终于不用用函数原型来实现类系统,可以直接使用关键字class,下面是对class的静态属性的研究:

举例:一个Node类,每一个Node类之间都可以建立从属关系,每一个Node实例下方可以带多个Node子实例,Node自身可以检索到所有实例的数量。

首先创建两个属性,他爹,和他的子孙

        this._parent = parent;
this._children = new Set();

创建生孩子的方法:(创建子节点)

    createChild(){
const node = new Node(this);
this._children.add(node);
return node;
};

创建与孩子断绝关系的方法:(删除节点)

    removeFromParent() {
this._parent._children.delete(this);
this._parent = null;
};

创建人口普查方法:(获取节点大小)

    get size() {
let size = 0;
for (const node of this._children) {
size += node.size
};
size = size ? size + 1 : 1
return size;
};

创建家谱:(将根节点存储起来)

    static addRoot(root) {
Node.roots = !Node.roots ? [root] : Node.roots.concat([root]);
};

看看家族中一共多少人:(获取根节点的所有节点)

    static get size () {
return Node.roots
.map(root => root.size)
.reduce((a,b) => a + b);
}

整个程序代码为:

class Node {
constructor(parent = null) {
this._parent = parent;
this._children = new Set();
if (this.isRoot) {
Node.addRoot(this)
};
}
get isRoot() {
return !this._parent;
};
createChild(){
const node = new Node(this);
this._children.add(node);
return node;
};
removeFromParent() {
this._parent._children.delete(this);
this._parent = null;
};
get size() {
let size = 0;
for (const node of this._children) {
size += node.size
};
size = size ? size + 1 : 1
return size;
};
static addRoot(root) {
Node.roots = !Node.roots ? [root] : Node.roots.concat([root]);
};
static get size () {
return Node.roots
.map(root => root.size)
.reduce((a,b) => a + b);
}
}

静态属性的好处在于可以为类本身定义一些方法,而不是实例的方法(原型链上)。

静态属性还有一个参数固化的功能:

先定义一个Animal

class Animal {
constructor (family, species, hue) {
this.family = family;
this.species = species;
this.hue = hue;
};
yell(){
return `I'm ${this.species}`;
};

再定义一个扩展的功能,传入扩展的功能函数和传给Animal的参数

    static extend(constructor,..._args) {//..._args为Animal中的参数
return class extends Animal {
constructor(...args) {
super(..._args);
constructor.call(this,...args);
}
}
}
}

最后检查结果

const Dog = Animal.extend(function(name){
this.name = name;
},'four_feet','dogy','woug');
const dog1 = new Dog('Doge');
dog1.yell();//woug
console.log(dog1.name);//Doge

由此可以看出可以给Animal类扩展任意功能然后赋值给一个新的类。在写可维护代码的时候至关重要。

ES2015 类中的静态方法的更多相关文章

  1. java 多线程3:Thread类中的静态方法

    Thread类中的静态方法 Thread类中的静态方法表示操作的线程是"正在执行静态方法所在的代码块的线程".为什么Thread类中要有静态方法,这样就能对CPU当前正在运行的线程 ...

  2. C#中类的实例是不能 获取到类中的静态方法和静态变量(Static)的,及原因

    类中的静态方法和变量是共享的.只能用类名去调用.

  3. 第7.17节 Python类中的静态方法装饰器staticmethod 定义的静态方法深入剖析

    第7.17节  Python类中的静态方法装饰器staticmethod 定义的静态方法深入剖析 静态方法也是通过类定义的一种方法,一般将不需要访问类属性但是类需要具有的一些能力可以静态方法提供. 一 ...

  4. Thread类中的静态方法

    1.currentThread() currentThread()方法返回的是对当前正在执行线程对象的引用. package thread; /** * 线程类的构造方法.静态块是被main线程调用的 ...

  5. Java多线程3:Thread中的静态方法

    Thread类中的静态方法 Thread类中的静态方法表示操作的线程是"正在执行静态方法所在的代码块的线程".为什么Thread类中要有静态方法,这样就能对CPU当前正在运行的线程 ...

  6. python中的静态方法和类方法

    在python中,各种方法的定义如下所示: class MyClass(object): #在类中定义普通方法,在定义普通方法的时候,必须添加self def foo(self,x): print & ...

  7. String类中常用的操作

    一.获取: 1.获取字符串的长度(注意是方法,不是跟数组的属性一样的) int length(); 1 public static void getLength(){ 2 String s = &qu ...

  8. Java多线程4:Thread中的静态方法

    一.Thread类中的静态方法 Thread类中的静态方法是通过Thread.方法名来调用的,那么问题来了,这个Thread指的是哪个Thread,是所在位置对应的那个Thread嘛?通过下面的例子可 ...

  9. @selector 如何调用在另一个类中的静态函数?

    可以在同一个类的methodName这个函数中再调用另一个类中的静态方法

随机推荐

  1. RegExp正则表达式规则以及常用正则表达式

    html,body { font-family: "SF UI Display", ".PingFang SC", "PingFang SC" ...

  2. 剑指offer第八天

    32.把数组排成最小的数 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323 ...

  3. 在linux系统中

    A .etc下放置配置文件 B./var下放置日志文件 C./root超级用户主目录 D./home 使用者家目录 /bin  二进制执行文件,也就是命令文件 /etc 下存放的是配置文件 /dev ...

  4. Spark第一个应用程序

    首先要对源码进行编译,生成对应hadoop版本的spark开发程序jar包,上篇已经写了具体的过程,这里不再赘述. 在安装spark的机器上,下载eclipse-java-x86_64版本,将spar ...

  5. Vue第一个自定义组件:数字输入框(number-input)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. QRCode 扫描二维码、扫描条形码、相册获取图片后识别、生成带 Logo 二维码、支持微博微信 QQ 二维码扫描样式

    目录 功能介绍 常见问题 效果图与示例 apk Gradle 依赖 布局文件 自定义属性说明 接口说明 关于我 功能介绍 根据之前公司的产品需求,参考 barcodescanner 改的,希望能帮助到 ...

  7. 1.1 PCI总线的组成结构

    如上文所述,PCI总线作为处理器系统的局部总线,是处理器系统的一个组成部件,讲述PCI总线的组成结构不能离开处理器系统这个大环境.在一个处理器系统中,与PCI总线相关的模块如图1?1所示. 如图1?1 ...

  8. 【javascript】jquery jsonp跨越请求

    <html> <head> <meta charset="utf-8"> <title></title> <scr ...

  9. AHCI模式安装XP以及驱动下载

    一.准备AHCI驱动 1.关于AHCI基础知识,请参考<AHCI模式的驱动下载.安装及蓝屏问题综合>一文. 2.安装AHCI驱动之前,请先确认桌面上.系统盘没有重要的东西需要备份,因为如果 ...

  10. CentOS6.5 [ERROR] /usr/libexec/mysqld: Can't create/write to file '/var/lib/mysqld/mysqld.pid' (Errcode: 2)

    环境是CentOS6.5,先贴个错误代码: 这个问题解决了大半天,浪费了好多时间,不过也算是值了. 事故起因是因为突然断电,mysql server直接干掉了,也没有备用电源,重启了之后看日志tail ...