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完善子类。