使用ES6新特性开发微信小程序(3)——类

Class(类)

Class是ES6引入的最重要特性之一。在没有Class之前,我们只能通过原型链来模拟类。

Class Definition(类的定义)

class Shape {
    constructor(name) {       
        this.name = name;
    }
    move(x, y) {       
        console.log(this.name + " Move to: " + x + "," + y);
    }
}

上面定义了一个Shape类,他有一个属性 name 和一个方法 move(),还有一个构造函数。

调用Shape类

let shapA = new Shape("Shape A", 180, 240); // 输出: Shape A Move to: 180,200
shapA.move(240, 320); // 输出: Shape A Move to: 240,320

Class Inheritance(类的继承)

通过关键字 extends 来继承一个类,并且可以通过 super 关键字来引用父类。

class Rectangle extends Shape {
    constructor(name) {
        super(name);
    }
    area(width, height) {        
        console.log(this.name + " Area:" + width * height);
    }
}    
class Circle extends Shape {
    constructor(name) {
        super(name);
    }
    area(radius) {        
        console.log(this.name + " Area:" + 3.14 * radius * radius);
    }
}

调用Rectangle、Circle类

let rectangleA = new Rectangle("Rectangle B");    
let circleB = new Circle("Circle C");
rectangleA.move(100, 200); // 输出: Rectangle B Move to: 100,200
rectangleA.area(30, 40); // 输出: Rectangle B Area:1200
circleB.move(200, 300); // 输出: Circle C Move to: 200,300
circleB.area(50); // 输出: Circle C Area:7850

Getter/Setter

在Class内部可以使用get和set关键字,对某个属性设置存值函数和取值函数,拦截该属性的存取行为。

class People {
    constructor(name) {        
        this._name = name;
    }
    get name() {        
        return this._name.toUpperCase();
    }
    set name(name) {        
        this._name = name;
    }
    sayName() {            
        console.log(this._name);
    }
}    
var p = new People("tom");    
console.log(p.name); // TOM
p.name = "john";    
console.log(p.name); // JOHN
p.sayName(); // john

Static Members(静态成员)

类相当于实例的原型,所有在类中定义的方法,都会被实例继承。如果在一个方法前,加上static关键字,就表示该方法不会被实例继承,而是直接通过类来调用,这就称为“静态方法”。

class F3 {
    static classMethod() {        
        return 'hello';
    }
}
F3.classMethod() // 输出: hellovar f3 = new F3();    
// f3.classMethod(); 
// 输出: TypeError: f3.classMethod is not a function

静态属性指的是Class本身的属性,即Class.propname,而不是定义在实例对象(this)上的属性。

class F4 {}
F4.prop = 5;    
console.log(F4.prop) // 输出: 5

原文发布于微信公众号 - 极乐技术社区(wxapp-union)

原文发表时间:2016-12-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java初学

5.7(1) 反射

323110
来自专栏marsggbo

c++学习笔记之封装篇(上)

一、类对象 假设我们由Tv这个类,定义如下 注意class结尾要加上分号 class Tv() { int width; int hei...

18560
来自专栏从零开始的linux

Python数据类型

整型 a=10 b=0 b+=a c=-100 c-=a print (a, b ,c) print (dir(a)) print (abs(a)+abs(c)...

32040
来自专栏拭心的安卓进阶之路

深入理解 Java 反射:Method (成员方法)

深入理解 Java 反射系列: 深入理解 Java 反射:Class (反射的入口) 深入理解 Java 反射:Field (成员变量) 深入理解 Java ...

43870
来自专栏技术专栏

Scala入门与进阶(三)- 函数

默认参数:在函数定义时,允许指定参数的默认值 $SPARK_HOME/conf/spark-defaults.conf

13330
来自专栏chenjx85的技术专栏

leetcode-541-Reverse String II

16650
来自专栏数据结构与算法

17:字符串判等

17:字符串判等 总时间限制: 1000ms 内存限制: 65536kB描述 判断两个由大小写字母和空格组成的字符串在忽略大小写,且忽略空格后是否相等。 ...

38290
来自专栏精讲JAVA

粗浅看 Java 反射机制

Java 反射是 Java 被视为动态(或准动态)语言的一个关键性质。这个机制允许程序在运 行时透过 Reflection APIs 取得任何一个已知名称的cl...

36460
来自专栏机器学习入门

LWC 60:736. Parse Lisp Expression

LWC 60:736. Parse Lisp Expression 传送门:736. Parse Lisp Expression Problem: You a...

23670
来自专栏彭湖湾的编程世界

【算法】实现栈和队列

栈(stack) 栈(stack)是一种后进先出(LIFO)的集合类型, 即后来添加的数据会先被删除 ? 可以将其类比于下面文件的取放操作:新到的文件会被先取走...

35660

扫码关注云+社区

领取腾讯云代金券