Javascript继承(原始写法,非es6 class)

时间:2024-06-26 17:33:44

知识点:

Object.create的内部原理:

Object.create =  function (o) {

    var F = function () {};
    F.prototype = o;
    return new F();
};
就是创建一个对象 然后把这个对象的__proto__原型对象指向o了 参数o是一个原型对象
下面讲一下Javascript中的继承:
// 这是一个constructor
function Person(name){
  this. name = name
}
// 在Person的原型对象上添加方法 
Person.prototype.greet = function(){ console.log(` hello ${this.name}` }
// 继承的第1步: 新建一个Teacher的constructor,在constructor中使用call方法调用父类constructor
function Teacher(name){
  Person.call(this,name)
}
/* 到此,Teacher和Person的原型对象上 都指向Object,   constructor分别指向自身函数
// 继承的第2步: 新建一个对象,将对象的__proto__指向Person的原型对象,将Teacher的原型对象prototype指向这个对象
Teacher.prototype = Object.create(Person.prototype)
/* 到此 Teacher的原型对象上没有constructor属性 如果调用实例化出来的teacher1的原型对象,就是在沿着原型链调用Person原型对象上的constructor
// 继承的第3步:继续处理这个原型对象,将原型对象中的constructor属性设为Teacher自身
Teacher.prototype.constuctor  = Teacher
到此继承完毕

注意: prototype属性 是Javascript中函数的属性