js继承原型链回顾

134 阅读1分钟

一、构造函数、原型、实例之间的关系

  1. 创建一个函数,该函数都会自动带有一个 prototype属性,该属性指向了一个对象(原型对象)
  2. 运行对象上有一个默认属性constructor,该属性指向了其关联的构造函数
  3. new出来构造函数的实例都有一个内部属性(proto),指向了原型对象,所以实力能够访问原型对象上的属性与方法

二、constructor、prototype、__proto__

  1. 定义函数的时候本身会默认有一个prototype属性,new生成的对象没有prototype属性
  2. 函数的prototype指向原型对象,原型对象包含两个属性:constructor、__proto__
  3. 每个对象内部都会有一个__proto__属性,当我们访问一个对象的属性时,如果对象内部不存在这个属性,那么他就会去__proto__里找这个属性,这个__proto__又会有自己的__proto__,于是一直找下去
function a(c){
    this.b = c;
    this.d =function(){
        alert(this.b);
    }
}
a.prototype.test = function(){
    alert(this.b);
}
var obj = function (){}
    obj.prototype = new a('test');
    obj.prototype.test1 =function(){
}
var t = new obj('test');
t.test();//alert('test');
  1. 上方代码中通过t.__proto__.__proto__ 找,由于t.__proto__.__proto__ = a.prototype 在 a.prototype 中找到了这个方法,输出了alert('test')

三、js继承

  1. 原型链继承
  2. 通过apply()、call()继承
  3. 两者结合

参考:

www.cnblogs.com/yupeng/arch…

www.cnblogs.com/sarahwang/p…

www.cnblogs.com/sarahwang/p…