在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. js利用闭包封装自定义模块的几种方法

    1.自定义模块: 具有特定功能的js文件 将所有的数据和功能都封装在一个函数的内部 只向外暴露一个包含有n个方法的对象或者函数 模块使用者只需要通过模块暴露的对象调用方法来实现相对应的功能 1.利用函 ...

  2. 一个简单清晰的Redis操作类

    <?php /** * redis处理的二次封装 * */ class Redis{ private $_redis; private $_config; public function __c ...

  3. 高并发关于微博、秒杀抢单等应用场景在PHP环境下结合Redis队列延迟入库

    第一步:创建模拟数据表. CREATE TABLE `test_table` ( `id` int(11) NOT NULL AUTO_INCREMENT, `uid` int(11) NOT NUL ...

  4. Unicode字符集,各个语言的区间

    链接:http://www.cnblogs.com/zl0372/p/unicode.html 链接:http://www.unicode.org/ 链接:https://zh.wikipedia.o ...

  5. mysql 导出每张表中的100条数据..............

    windows下配好MYSQL 环境变量,cmd 然后: mysqldump -uroot -p123 [数据库名]--where "1=1 limit 100" --lock-a ...

  6. python高阶函数式编程

    from functools import reduce def str2int(s): def fn(x, y): return x * 10 + y def char2num(s): return ...

  7. Luogu P1690 贪婪的Copy

    题目描述 Copy从卢牛那里听说在一片叫yz的神的领域埋藏着不少宝藏,于是Copy来到了这个被划分为个区域的神地.卢牛告诉了Copy这里共有个宝藏,分别放在第Pi个(1<=Pi<=N)区域 ...

  8. 沉淀,再出发——在Ubuntu Kylin15.04中配置Hadoop单机/伪分布式系统经验分享

    在Ubuntu Kylin15.04中配置Hadoop单机/伪分布式系统经验分享 一.工作准备 首先,明确工作的重心,在Ubuntu Kylin15.04中配置Hadoop集群,这里我是用的双系统中的 ...

  9. 2.4 PCI总线的配置

    PCI总线定义了两类配置请求,一个是Type 00h配置请求,另一个是Type 01h配置请求.PCI总线使用这些配置请求访问PCI总线树上的设备配置空间,包括PCI桥和PCI Agent设备的配置空 ...

  10. vxworks for x86读取bios时间的解决方法

    vxworks for x86读取bios时间的解决方法 系统时间与bsp有关,在vzworks for x86系列的目标没有直接读取RTC(实时时钟控制器)的函数,用time.h中的函数读到的始终是 ...