返回

原型对象、原形属性和构造函数的三角关系

前端

JavaScript中的原型

在JavaScript中,每个对象都有一个原型对象,它是一个特殊的对象,包含了该对象的所有属性和方法。原型对象可以通过对象的prototype属性访问。

const obj = {
  name: "John Doe",
  age: 30,
};

console.log(obj.prototype); // undefined

如上例所示,对象的prototype属性为undefined,这是因为JavaScript中的对象没有直接的原型对象。但是,我们可以通过Object.getPrototypeOf()方法来获取对象的原型对象。

const obj = {
  name: "John Doe",
  age: 30,
};

console.log(Object.getPrototypeOf(obj)); // {}

如上例所示,对象的原型对象是一个空对象。这是因为JavaScript中的对象默认继承自Object对象,而Object对象的原型对象是null。

JavaScript中的原形属性

对象的原形属性是指原型对象中的属性。这些属性可以通过对象的prototype属性访问。

const obj = {
  name: "John Doe",
  age: 30,
};

console.log(obj.prototype.toString); // function toString() { ... }

如上例所示,对象的prototype属性包含了一个toString方法。这个方法是Object对象的原形属性,它被继承到了obj对象中。

JavaScript中的构造函数

构造函数是用来创建对象的函数。构造函数的名称通常以大写字母开头。

function Person(name, age) {
  this.name = name;
  this.age = age;
}

如上例所示,Person是一个构造函数,它接受两个参数:name和age。当我们使用new运算符调用构造函数时,就会创建一个新的对象。

const person = new Person("John Doe", 30);

console.log(person); // { name: "John Doe", age: 30 }

如上例所示,new运算符调用Person构造函数创建了一个新的person对象。这个对象具有name和age属性,它们的值分别为"John Doe"和30。

原型、原形属性和构造函数之间的关系

原型、原形属性和构造函数之间的关系可以总结如下:

  • 构造函数是用来创建对象的函数。
  • 原型对象是构造函数的原型。
  • 原形属性是原型对象中的属性。
  • 对象通过prototype属性继承原型对象中的属性和方法。

总结

原型、原形属性和构造函数是JavaScript面向对象编程的基础知识。理解这三个概念之间的关系对于理解JavaScript的继承机制非常重要。