JavaScript prototype(原型对象)

JavaScript 中所有的对象都有一个内置属性,称为它的 prototype(原型)。它本身是一个对象,故原型对象也会有它自己的原型,逐渐构成了原型链。原型链终止于拥有 null 作为其原型的对象上。

Object.prototype ,它是最基础的原型,所有对象默认都拥有它。 Object.prototype 的原型是 null ,所以它位于原型链的终点。

当你试图访问一个对象的属性时:如果在对象本身中找不到该属性,就会在原型中搜索该属性。如果仍然找不到该属性,那么就搜索原型的原型,以此类推,直到找到该属性;或者到达链的末端,在这种情况下,返回 undefined

获取原型

Object.getPrototypeOf(obj) 标准方式

obj.__proto__ 所有浏览器中,对象都会有这个属性,指向原型

设置原型

Object.create() 设置原型

1
2
3
4
5
6
7
8
9
10
const personPrototype = {
greet() {
console.log("hello!");
},
};

const carl = Object.create(personPrototype);
carl.greet(); // hello!

// 用 Object.create() 来创建一个以 personPrototype 为原型的新对象。

构造函数 设置原型

所有函数都有 prototype 属性

将函数调用为 构造函数 时,此属性指向的对象 被设置为新建对象的原型

1
2
3
4
5
6
7
8
9
const personPrototype = {
greet() {
console.log(`hello, my name is ${this.name}!`);
},
};

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