发表于: 2017-07-12 23:27:29
1 906
今天完成的事情:学习ES6的新特性
明天计划的事情:改bug,学习ES6
遇到的问题:对js还有很多不懂的地方,要好好研究
收获:
学习ES6的class的基本语法
//定义类
class Point {
constructor(x, y) {
this.x = x;
this.y = y;
}
toString() {
return '(' + this.x + ', ' + this.y + ')';
}
}
//实例化一个类
var point = new Point(2, 3);
这种写法是一个语法糖,原理还是ES5的prototype,但是这样写起来很清晰明了
实例化一个类和ES5一样,还是用new
constructor
方法是类的默认方法,通过new
命令生成对象实例时,自动调用该方法。一个类必须有constructor
方法,如果没有显式定义,一个空的constructor
方法会被默认添加。
私有方法:
ES6不直接提供私有方法,只能通过变通方法模拟实现
方法一:将私有方法移出模块
class Widget {
foo (baz) {
bar.call(this, baz);
}
// ...
}
function bar(baz) {
return this.snaf = baz;
}
这样就只能通过foo方法去执行bar函数了,这使得bar
实际上成为了当前模块的私有方法。
方法二:还有一种方法是利用Symbol
值的唯一性,将私有方法的名字命名为一个Symbol
值。
const bar = Symbol('bar');
const snaf = Symbol('snaf');
export default class myClass{
// 公有方法
foo(baz) {
this[bar](baz);
}
// 私有方法
[bar](baz) {
return this[snaf] = baz;
}
// ...
};
ES6 引入了一种新的原始数据类型Symbol
,表示独一无二的值。它是 JavaScript 语言的第七种数据类型。
bar
和snaf
都是Symbol
值,导致第三方无法获取到它们,因此达到了私有方法和私有属性的效果。
评论