面向对象特点
重载:一个类里面存在方法名相同,但是参数不一样的方法
ES5模拟面向对象
http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html
http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_inheritance.html
http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_inheritance_continued.html
ES6 class 面向对象支持情况
图片私有方法模拟
1._约定
2.将方法移出类定义,在模块内部可见,在模块外部不可见
3.方法命名未一个Symbol值
4. 私有属性/方法提案:#
静态方法
静态方法可以继承,只能在类上调用,不能在实例上调用
class ParentClass {
static testStaticMethod() {
console.log('testStaticMethod');
}
}
class ChildClass extends ParentClass {
}
ParentClass.testStaticMethod() ; // testStaticMethod
ChildClass.testStaticMethod() ; // testStaticMethod
(new ParentClass()).testStaticMethod() ; // Error
静态属性
class ParentClass {
static testStaticPro = 'testStaticPro';
}
console.log(ParentClass.testStaticPro); // testStaticPro
抽象方法模拟
class ParentClass {
m1() {
throw new Error();
}
m2() {
throw new Error('m2 method is not implementd');
}
}
class ChildClass extends ParentClass {
m1() {
console.log('m1');
}
}
let child = new ChildClass();
child.m1(); // m1
child.m2(); // new Error();
多重继承
extends不支持集成多个父类,但是class本质是function,可以通过mixin多个funciton,达到多重继承的效果
网友评论