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 指向该类
    JS--原型链理解_第1张图片
    原型链图

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


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函数:

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

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

你可能感兴趣的:(JS--原型链理解)