es6 class
1.Es6引入了Class 类这个概念,作为对象的模板,通过class 关键字,可以定义类。
2.类和模块的内部,默认就是严格模式,所以不需要使用use strict 指定运行模式。
3.constructor 方法就是类的默认方法,通过new 命令生成对象实例时,自动调动该
方法,一个类必须有constructor 方法,如果没有显示定义,一个空的constructor
方法会默认添加。
4.类的实例对象
必须使用new ,像函数那样调用Class ,将会报错。
例如:
class Point {
}
// 报错
var point = Point(2,3);
// 正确
var point = new Point(2,3)
5.Class表达式
与函数一样,类也可以使用表达式的形式定义。
const MyClass = class Me{
getClassName() {
return Me.name;
}
};
采用Class 表达式,可以写出立即执行的Class
let person = new clas {
constructor(name){
this.name = name;
}
sayName() {
console.log(this.name);
}
}('张三');
person.sayName(); //张三
6.类不存在变量提升。
7.不提供私有方法和私有属性。
8.this 的指向
类德丰放内部含有this,它默认指向类的实例。
9.class 的静态方法。在类中定义的方法,都会被实例继承,
如果在一个方法前加上static 关键字,就表示该方法
不会被实例继承,而是直接通过类来调用。
class Foo {
static classMethod() {
return 'hello';
}
}
Foo.classMethod() // 'hllo'
var foo = new Foo();
foo.classMethod(); // 报错
10.class 可以通过extends关键字实现继承。
class Point {}
class ColorPoint extends Point{}
class ColorPoint extends Point {
constructor(x,y.color){
super(x,y); // 调用父类的 constructor(x,y)
this.color = color;
}
toString() {
return this.color + ' '+ super.toString(); // 调用父类的方法
}
}
子类必须在constructor 方法中调用super 方法,否则新建实例时会报错,因为子类没
有自己的 this 对象,而是继承父类的this 对象,而活对其进行加工,如果不调用
super 方法,子类就的不到this 对象。
11.Object.getPrototypeOf()
Object.getPrototypeOf(ColorPoint) == Point
可以使用这个方法判断,一个类是否继承另一个类。
12.super 关键字
super 这个关键字既可以当作函数使用,也可以当做对象使用。
1.super 作为函数调用的时,代表父类的构造函数。子类的构造函数必须
执行一次super函数。
class A {}
class B extends A {
constructor() {
super();
}
}
2.super 作为对象时,在普通方法中,指向父类的原型对象,在
静态方法中指向父类。
class A {
p() {
return 2;
}
}
class B extends A{
constructor() {
super();
console.log(super.p()); // 2
}
}
13.类的prototype 属性和__proto__ 属性
class 作为构造函数的语法糖,同时有prototype 属性和__proto__属性,因此
存在两天继承连。
1.子类的__proto__ 属性,表示构造函数的继承,总是指向父类。
2.子类的prototype 属性的__proto__属性,表示该方法的继承,总是指向父类
的protoype属性。
class A {}
class B extends A {}
B.__proto__===A // true
B.proptoype.__proto__ === A.prototype // true
14.extends 的继承目标
extends 关键字后面可以跟很多类型的值。
15.实例的__proto__属性
子类属性的__proto__属性的__proto__属性,指向父类实例的__proto__,也就是说
子类原型的原型,是父类的原型。
var p1 = new Point(2,3);
var p2 = new ColorPoint(2,3,'red');
p2.__proto__===p1.__proto // false
p2.__protot__.__proto__===p1.__proto__ // true
- 用PHP蜘蛛做旅游数据分析
- 一秒找出用时间和随机数生成的上传文件名
- Java之集合的遍历与迭代器
- Java之字符串String,StringBuffer,StringBuilder
- JavaScript深入浅出补充——(一)数据类型,表达式和运算符
- Oracle数据库(一)概述、基础与简单操作
- Oracle数据库(二)常用关键字以及函数
- Oracle数据库(三)表操作,连接查询,分页
- 正式学习第一天下午——基础标签及其属性
- 正式学习第二天上午——常用标签及列表 0605
- Java之面向对象例子(三) 多态,重写,重载,equals()方法和toString()方法的重写
- Java之IO流补充
- JavaWeb 例子 JDBC+JSP登陆注册留言板
- 基于bro的计算机入侵取证实战分析
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法