发表于: 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 语言的第七种数据类型。


barsnaf都是Symbol值,导致第三方无法获取到它们,因此达到了私有方法和私有属性的效果。



返回列表 返回列表
评论

    分享到