js原型对象与原型链

首先我们要先了解几个概念,js万物皆对象,所有类型(对象,函数,数组...)都有一个属性 proto,只有函数才有属性prototype。
下面我们先来看一下构造函数属性constructor

function Person(name, age) {
      this.name = name;
      this.age = age;
      this.sayName = function() { alert(this.name) };
  }
  var person1 = new Person("BurC", 21);
  var person2 = new Person("VinX", 22);
  console.log(person1.constructor == Person); //true
  console.log(person2.constructor == Person); //true

person1 和 person2 都是 Person 的实例。这两个实例都有一个 constructor (构造函数)属性,该属性指向 Person。 所以说这个construct属性指向的是他的构造函数。

找原型链是在属性__proto__ 属性上去找,而不是在属性prototype上面去找。

function Person(){}; 
var burc = new Person();
console.log(burc.constructor  === Person); //true
console.log(burc.__proto__ === Person .prototype); //true
console.log(burc.__proto__ === burc.constructor.prototype); //true
console.log(burc.__proto__); //Person()  {}
console.log(burc.__proto__.__proto__); //Object()  {}
console.log(burc.__proto__.__proto__.__proto__); //null

burc 的 __proto__ 属性指向 burc的构造函数的原型对象
柏成画了两张图帮助大家理解


QQ图片20190826164233.png
QQ图片20190826203405.png

参考链接
https://www.cnblogs.com/shuiyi/p/5305435.html

你可能感兴趣的:(js原型对象与原型链)