ES5和ES6的区别

JavaScript
JavaScript是基于原型的客户端脚本语言,用来给HTML网页增加动态功能。
JavaScript由三部分组成:ECMAScript(核心)+ DOM(文档对象模型)+ BOM(浏览器对象模型)

ES全称就是ECMAScript,作为JavaScript语言的核心,规定了语言的组成部分:语法、类型、语句、关键字、保留字、操作符、对象。

ES5和ES6的不同之处

1 系统库的引用
ES5中的引用需要先使用require导入包,成为对象,再去进行真正引用

// ES5
var React = require("react");
var {
    Component,
    PropTypes
} = React;  //引用React抽象组件
 
var ReactNative = require("react-native");
var {
    Image,
    Text,
} = ReactNative;  //引用具体的React Native组件

在ES6里,可以使用import直接实现系统库引用,不需要额外制作一个类库对象:

//ES6
import { 
    Component,
    PropTypes,
} from 'react';
import {
    Image,
    Text
} from 'react-native'

2 导出及引用单个类
ES5中,要导出一个类给别的模块使用,一般通过module.exports来实现,引用时通过require方法来获取:

//ES5导出
var MyComponent = React.createClass({
    ...
});
module.exports = MyComponent;
 
//ES5导入
var MyComponent = require('./MyComponent');

ES6中,使用export default实现同样的功能,但要使用import方法来实现导入:

//ES6导出(一般都继承于Component类)
export default class MyComponent extends Component{
    ...
}
 
//ES6导入
import MyComponent from './MyComponent';

3 ES5 和 ES6 继承的区别

// ES5的继承
function FatherClass(name) {
    this.family = ['father', 'mother', 'daughter'];
    this.name = name
};
FatherClass.prototype.getName = function () {
    console.log(this.name);
};
function ChilderClass(name, age) {
    // 子类继承父类(没涉及到父类原型)
    FatherClass.call(this, name)
    this.age = age;
};
function F() { };
//过渡函数的原型继承父对象
F.prototype = FatherClass.prototype;
ChilderClass.prototype = new F();
var c = new ChilderClass('lily', 18);

这个就是es5的类继承,构造函数继承和原型继承是分开的(两种不同的方式)。子类继承父类的时候,先创造子类的实例对象this,然后再将父类的属性和方法添加到this上面(FatherClass.call(this,name)),然后再去继承原型链。

// ES6的继承
class FatherClass {
    family = ['father', 'mother', 'daughter'];
    constructor(name) {
        this.name = name
    }
    getName() {
        console.log(this.name);
    }
};

class ChilderClass extends FatherClass {
    constructor(name, age) {
        super(name);
        this.age = age;
    }
};
var c = new ChilderClass('lily', 18);

这里类继承机制完全和es5不一样,是调用super方法将父类的属性和方法加到this上面。在子类的构造函数中,只有调用super之后,才可以使用this关键字,否则会报错。这是因为子类的构建基于父类,只有super方法才能调用父类构造函数。

总结
ES5的继承实质上是先创建子类的实例对象this,然后再将父类的方法添加到this上(Parent.apply(this)),然后继承原型。
ES6的继承机制完全不同,它是在子类的构造器中先调用super方法,创建出父类实例对象this,然后再去修改子类中的this完善子类。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敲起来blingbling

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值