# 深入理解js原型链

什么是原型
JS是一个基于对象的脚本语言,和java等面向对象语言最大不同是:
JS中没有类的概念(PS:ES6的类只是一种语法糖)

原型就好比面向对象中的 类(模具),没有类,就没有对象

面向对象语言中,要先定义类才能创建对象
JS中,无须定义原型就可以直接创建对象

例子:

|对象原型 -- Object.prototype
|数组原型 -- Array.prototype
|方法原型 -- Function.prototype

原型的创建时机与修改
当函数定义的时候,原型就创建了
console.log(Person.prototype); //已经存在

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

console.log(Person.prototype); //已经存在
如果更改原型对象的属性,所有相关对象都会生效,无论是改前还是改后创建的对象
function Person(){
this.name = "xxx";
}

var a = new Person();
a.age // undefined
Person.prototype.age = 100;
var b = new Person();
a.age // 100
b.age // 100

  • 如果更改原型对象本身,那么在改前创建的对象,它的原型还是指向改前的原型对象,而改后创建的对象,它的原型才会指向改后的原型对象
    function Person(){
    this.name = "xxx";
    }

var a = new Person();
Person.prototype = {age:120};
var b = new Person();

a.age // undefined
b.age // 120
什么是原型链?作用是什么?
原型链就是原型与原型之间的关联

作用:用于实现继承,原型之间的继承,对象之间的继承
注意:JS内部继承的实现就是靠原型链,没有原型链就没有继承