五、子类继承父类方法同时扩展自己的方法
// 父类有加法方法
class Father {
constructor(x, y) {
this.x = x;
this.y = y;
}
sum() {
console.log(this.x + this.y); //8
}
}
// 子类继承父类加法方法 同时 扩展减法方法
class Son extends Father {
constructor(x, y) {
// 利用 super 调用父类的构造函数
// super 必须在子类this之前调用 但也可以省略掉this的操作
super(x, y);
this.x = x;
this.y = y;
}
subtract() {
console.log(this.x - this.y); //2
}
}
var son = new Son(5, 3);
son.sum();
son.subtract();
六、类遵循严格模式
知识要点:
1、什么是严格模式:
JavaScript除了提供正常模式外,还提供了严格模式。ES5的严格模式是采用具有限制性;JavaScript变体的一种方式,即在严格的条件下运行的JS代码
严格模式在IE10以上版本的浏览器中才会被支持,旧版本浏览器中会被忽略
2、怎么开启严格模式:
【为函数开启严格模式】两种情况
一、为脚本开启严格模式
为整个脚本文件开启严格模式,需要在所有语句之前放一个特定语句 "use strict";(或 'use strict';)
二、为函数开启严格模式
要给某个函数开启严格模式,需要把 "use strict";(或 'use strict';)声明放在函数体所有语句之前
function fn() {
"use strict";
console.log(this);
}
fn();
class Star {
show() {
function uname() {
console.log(this);
}
uname();
}
}
var star = new Star();
star.show();
七、类的静态属性
知识要点:
一、构造函数的静态成员和实例成员
(1)静态成员:在构造函数本上添加的成员称为静态成员,只能由构造函数本身访问
静态成员 在构造函数本身上添加成员
静态成员 只能通过构造函数来访问
(2)实例成员:在构造函数内部创建对象成员称为实例成员,只能由实例化的对象来访问
实例成员就是构造函数内部通过this添加的成员 uname、age、sing 就是实例成员
实例成员只能通过实例化的对象来访问
二、类里面的静态属性——[static]
class本身的属性,即直接定义在类内部的属性(Class.propname),不需要实例化。 ES6 中规定,Class 内部只有静态方法,没有静态属性。
//1.构造函数里的静态成员和实例成员
function Star(uname, age) {
this.uname = uname;
this.age = age;
this.show = function () {
console.log("我是实例成员");
};
}
var star = new Star("王总", 18);
console.log(star.uname);
console.log(Star.uname); //实例成员不可以通过构造函数来访问
star.show();
Star.sex = "男";
console.log(star.sex); //静态成员不可以通过对象来访问
console.log(Star.sex);
Star.prototype.show = function () {
console.log("我是通过原型的方法");
};
star.show();
star.__proto__.show = function () {
console.log("我是方法");
};
star.show();
console.log(star);
//2.类里面的静态
class Star {
constructor(uname, age) {
this.uname = uname;
this.age = age;
}
show() {
console.log("我原型对象是" + this.uname);
}
static sing(uname) {
console.log("我原型对象是" + uname);
}
}
var star = new Star("王总", 18);
var star1 = new Star("王老板");
star.show();
Star.sing("王老板");
//3.子类的静态方法能够通过super来调用父类的静态方法
class Person {
static getName() {
return "lear";
}
}
class Student extends Person {
static getName2() {
return super.getName() + ",hi";
}
}
console.log(Student.getName2());