原型, 原型链 学习

83 阅读1分钟

原型到原型链

构造函数创建对象

使用 new 创建一个 实例对象 Person

function Person() {}
var peron = new Person();
person.name = 'link';
console.log(person.name);

prototype

  1. 每个函数都有一个 prototype 属性,就是我们经常在各种例子中看到的那个 prototype

  2. 函数的 prototype 属性指向了一个对象,这个对象正是调用该构造函数而创建的实例的原型,也就是这个例子中的 person1 和 person2 的原型。

  3. 每一个 JavaScript 对象(null 除外)在创建的时候就会与之关联另一个对象,这个对象就是我们所说的原型,每一个对象都会从原型"继承"属性。

function Person() {}
// prototype是函数才会有的属性
Person.prototype.name = 'Kevin';
var person1 = new Person();
var person2 = new Person();
console.log(person1.name); // Kevin
console.log(person2.name); // Kevin

__proto__

  1. 这是每一个 JavaScript 对象(除了 null )都具有的一个属性,叫__proto__,这个属性会指向该对象的原型。
function Person() {}
var person = new Person();
console.log(person.__proto__ === Person.prototype); // true

constructor

每个原型都有一个 constructor 属性指向关联的构造函数

function Person() {}

var person = new Person();

console.log(person.__proto__ == Person.prototype); // true
console.log(Person.prototype.constructor == Person); // true
// 顺便学习一个ES5的方法,可以获得对象的原型
console.log(Object.getPrototypeOf(person) === Person.prototype); // true

实例与原型

function Person() {}

Person.prototype.name = 'Kevin';

var person = new Person();

person.name = 'Daisy';
console.log(person.name); // Daisy

delete person.name;
console.log(person.name); // Kevin

console.log(Object.prototype.__proto__ === null); // true