很多人对constructor的理解是指向对象的构造函数,今天才发现这种理解是有偏差的...

其实, constructor指向的不是实例化实例的构造函数,而是实例化该对象的构造函数的原型的构造函数

以这个实例为例,p.constructor指向的是Person.prototype的构造函数

<script type="text/javascript">

function Person(name) {
    this.name = name
}

//在没有给Person.prototype进行重写,或者使用Person.prototype.getName来添加原型的新方法,Person.prototype的构造函数指向的就是Person
//重写原型
Person.prototype = {
    getName: function() {}
};
//重写原型后,Person.prototype是用原生的json格式来创建的对象,json对象的构造函数就是Object()

var p = new Person('jyh');

console.log(p.constructor);
//p.__proto__指向的是p的构造函数的原型
console.log(p.__proto__ === Person.prototype);
//不重写的时候,Person.prototype的构造函数就指向Person,它们是相等的
//重写原型后,p.constructor.就指向了Object(),所以它们不再相等
console.log(p.__proto__ === p.constructor.prototype);
</script>

 

相关文章:

  • 2022-12-23
  • 2022-02-16
  • 2022-12-23
  • 2022-12-23
  • 2021-04-21
  • 2021-11-06
  • 2021-09-22
猜你喜欢
  • 2021-04-07
  • 2021-05-27
  • 2021-09-14
  • 2021-09-14
  • 2022-01-12
  • 2022-12-23
相关资源
相似解决方案