面向对象三大特征——封装、继承、多态
封装:通过修饰符对其成员访问权限进行限制。
其中修饰符指外部、父子本类 public;本类、子类 protected;私有 private。
继承:一个类(子类、派生类)继承了其另一个类(父类)。
多态:对象多种形态。
接下来要解析的是JavaScript实现继承的多种方式。
方式一
function Person() {
this.name = '王'
}
function Parent() {
this.name = '张'
this.email = 'zhang@163.com'
}
Person.prototype = new Parent();
let child = new Person();
console.log(child.name, child.email);
//由内而外找:自身Person无→父parent
方式二
function MyObj(obj) {
for (let x in obj) {
// this[x] = obj[x];
MyObj.prototype[x] = obj[x]; //往原型对象上加属性、方法是可以的
// MyObj.prototype = obj; 错误,区别于MyObj.prototype[x] = obj[x]
}
}
let my = new MyObj({
id : 10001,
name : 'admin',
foo: function(){
console.log(this);
}
});
console.log(my);
方式三
class Parent {
name = '张';
foo(){
console.log(this);
};
constructor() {
console.log('父类的构造方法执行');
}
}
class Child extends Parent {
name = '郭';
constructor() {
super(); //必须用super()先调用父类的constructor
console.log('子类的构造方法执行');
}
}
let obj = new Child();
// console.log(obj);
obj.foo();