js知识点-对象原型

61 阅读1分钟

JavaScript 中所有的对象都有一个内置属性,称为它的 prototype(原型)。它本身是一个对象,故原型对象也会有它自己的原型,逐渐构成了原型链。原型链终止于拥有 null 作为其原型的对象上。 访问对象原型的标准方法是 Object.getPrototypeOf()。 一个对象的原型并不总是 Object.prototype,试试这段代码:

JSCopy to Clipboard

const myDate = new Date();
let object = myDate;

do {
  object = Object.getPrototypeOf(object);
  console.log(object);
} while (object);

// Date.prototype
// Object { }
// null

这段代码创建了 Date 对象,然后遍历了它的原型链,记录并输出了原型。从中我们知道 myDate 的原型是 Date.prototype 对象,Date.prototype)的原型是 Object.prototype

myDate 的原型链

实际上,如果调用了你所熟悉的方法(如 myDate2.getMonth()),是在 Date.prototype 上定义的方法调用的。

const personPrototype = {
  greet() {
    console.log(`你好,我的名字是 ${this.name}!`);
  },
};

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

Object.assign(Person.prototype, personPrototype);
// 或
// Person.prototype.greet = personPrototype.greet;

这里我们:

  • 创建了一个 personPrototype 对象,它具有 greet() 方法
  • 创建了一个 Person() 构造函数,它初始化了要创建人物对象的名字

然后我们使用 Object.assign 将 personPrototype 中定义的方法绑定到 Person 函数的 prototype 属性上。