软件设计 2017-05-26
一、基础用法
//1传统面向对象 构造函数 function Person(name,age){ this.name = name; this.age = age; } Person.prototype.sayName = function(){ console.log(this.name); //王大厨 } var person = new Person('王大厨','26'); person.sayName();
2.
//2.es6 中定义的类 class Person{ constructor(name,age){ this.name = name; this.age = age; } sayName(){ console.log(this.name) //王二厨 } } var person = new Person('王二厨',22); person.sayName(); //在ES6的“类”上面继续存在。事实上,类的所有方法都定义在类的prototype属性上面。
3.枚举
类的内部所有定义的方法,都是不可枚举的(non-enumerable)。跟es5中的差距。
4.constructor 方法
constructor
方法是类的默认方法,通过new
命令生成对象实例时,自动调用该方法。一个类必须有constructor
方法,如果没有显式定义,一个空的constructor
方法会被默认添加。
默认返回this,及实列对象。返回可以指定返回另外的对象。
类的构造函数,不使用new
是没法调用的,会报错。这是它跟普通构造函数的一个主要区别,后者不用new
也可以执行。
5.类的实列对象
生成类的实例对象的写法,与ES5完全一样,也是使用new
命令。如果忘记加上new
,像函数那样调用Class
,将会报错。
var person = new Person('王二厨',22); //正确 var p1 = Person(); //报错
与ES5一样,实例的属性除非显式定义在其本身(即定义在this
对象上),否则都是定义在原型上(即定义在Class
上)。
6.不存在变量的提升
//Class不存在变量提升(hoist),这一点与ES5完全不同。 new Person(); //报错 class Person{}
7.立即执行的Class 类
let p = new class{ constructor(name){ this.name = name; } sayName(){ console.log(this.name); } }('王三厨');
二、继承
Class之间可以通过extends
关键字实现继承,这比ES5的通过修改原型链实现继承,要清晰和方便很多。(跟php中一样啊