ES5实现
方式一:子类原型指向父类实例;
缺点:
1.无法向父类传参
2.想在子类原型上添加方法必须在new Person之后
3.父类原型上所有属性被共享
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.sex = "男"
function Student(stuNo) {
this.stuNo = stuNo;
}
Student.prototype = new Person();
let stu = new Student("2016190319");
console.log(stu.stuNo);
console.log(stu.sex);
console.log(stu.name)
方式二:构造函数+子类原型指向父类实例
function Person(options) {
this.name = options.name;
this.age = options.age;
}
Person.prototype.sex = "男"
function Student(options) {
Person.call(this, options)
this.stuNo = options.stuNo;
}
Student.prototype = Object.create(Person.prototype);
Student.prototype.constructor = Student;
Student.prototype.say = function() {
console.log("hello")
}
let stu = new Student({
name: "小刘",
age: "18",
stuNo: "2016190319"
});
console.log(stu.stuNo);
console.log(stu.sex);
console.log(stu.name);
console.log(stu.say());
ES6 class实现继承 语法糖
class Person {
// sex:"name"
constructor(options) {
this.name = options.name;
this.age = options.age;
}
get sex() {
return "男"
}
}
class Student extends Person {
constructor(options) {
super(options);
this.stuNo = options.stuNo;
}
say() {
console.log("hello")
}
}
let stu = new Student({
name: "小刘",
age: "18",
stuNo: "2016190319"
});
console.log(stu.stuNo);
console.log(stu.sex);
console.log(stu.name);
console.log(stu.say());