JS--原型链理解

本文是作者记录的笔记,以免以后忘记。参考博客廖雪峰

function Person (name) {    
          this.name = name;    
          this.say = function () { 
          console.log('hello, my name is ' + this.name);   
     }
}
var person01 = new Person('asayao');
console.log(person01.__proto__ === Person.prototype);
console.log(person01.constructor === Person.prototype.constructor);
console.log(person01.constructor === Person);
console.log(Person.prototype.__proto__ == Object.prototype);

如上代码创建了一个Person的对象,其原型链是这样的:
person01 -----> Person ------> Object -----> null
person01 包含以下主要属性:__proto__constructor
Person 包含以下主要属性: prototypeconstructorproto

  • person01.__proto__ === Person.prototype 说明实例对象_proto指向该类的prototype
  • person01.constructor === Person 说明实例对象指向该类
  • person01.constructor === Person.prototype.constructor 说明实例对象指向该类的constructor
  • Person === Person.prototype.constructor 该类的construtor 指向该类
    原型链图

那么,现在,我们可以通过以下方式来继承函数:


function SuperMan(name, age) {
    Person.apply(this, arguments);
}
    inheritProperty(Man,Person);
    var man1 = new Man('jax');
    var man2 = new Man('ezer');
    console.log(man1.say == man2.say);
    console.log(man1.name == man2.name);

    function inheritProperty(subType, superType) { 
    var prototype = Object.create(superType.prototype);//创建对象         
    prototype.constructor = subType;//增强对象   
    subType.prototype = prototype;//指定对象
 }

解析此inheritProperty函数:

  • 创建一个与父类相同的类型
  • 该类指向子类
  • 子类指向该类型

那么相当于拷贝了一份类型。随后通过此类型来继承即可。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容