构造函数和原型的关系

构造函数的作用

构造函数的主要作用是用于生成对象。

有其他面向对象语言开发经验的同学可能会觉得使用 new 运算符的语法和创建类的示例很像,其实本质是不一样的。

结合原型的特性,在 JavaScript 中也能实现类似于类的一套机制。

 

 

首先看一段代码:

function Point(x, y) {
  this.x = x;
  this.y = y;
}

var point = new Point(1, 2);

console.log(point.__proto__);

 

这样打印出来的 point 的原型对象,除了 constructor 和 __proto__ 属性,就什么都没有了。

接下来做个改写:

function Point(x, y) {
  this.x = x;
  this.y = y;
}

Point.prototype.info = function() {
  console.log('x: ' + this.x + ', y: ' + this.y);
};

var point = new Point(1, 2);

point.info(); // 输出:"x: 1, y: 2"

console.log(point.__proto__);

 

 

这样输出的 point 的原型对象,就具有了一个 info 方法。

从这就可以看出对象的原型,和他的构造函数的 prototype 属性是有关的。

所有函数都具有一个 prototype 属性,翻译过来也是 原型的意思

当一个函数作为构造函数被调用的时候,就会把这个函数的 prototype 属性,作为构造函数生成的对象的原型。

使用相等运算符,就可以验证上面这个规则:

console.log(
  point.__proto__ === Point.prototype,
); // 输出:true

这就是一个对象原型的由来。

如果要知道对象由哪个构造函数生成,可以从 constructor 属性获取到,原型对象的 constructor 属性则指向这个原型所处的函数。

 
posted @ 2022-08-25 16:06  神奇名字  阅读(94)  评论(0)    收藏  举报