JavaScript 原型、原型链

JavaScript 原型、原型链

[JavaScript深入之从原型到原型链

原型

image-20190307163248964

1
2
3
4
5
6
7
8
9
10
11
12
const Person = function() {};  // 所有的函数都能成为构造函数
Person.prototype.say = function() {
console.log("say hello");
};

const person = new Person();

console.log(person.__proto__ === Person.prototype);
console.log(person.constructor === Person);
console.log(Person.prototype.__proto__ === Object.prototype);
console.log(Person.__proto__ === Function.prototype);
console.log(Person.prototype.constructor === Person);

原型链

原型链是有原型对象组成的,每个对象都有 proto属性,指向了创建该对象的构造函数的原型,proto 将对象连接起来组成了原型链。是一个用来实现继承和共享属性的有限对象链。

  • 属性查找机制:当查找对象属性时,如果实例对象自身不存在该属性,则沿着原型链往上一级查找,找到时则输出,不存在时,则沿着原型链往上一级查找,直至最顶级的原型对象 Object.prototype,如果还是没有找到则输出 undefined

  • 属性修改机制:只会修改实例本身的属性,如果不存在,则添加该属性,如果需要修改原型的属性时,则可以用 b.prototype.x = 2; 但这样会造成所有继承于该对象的实例的属性发生改变.