原型对象的深入理解

对于这个原型对象,我们就要重点理解下了。这个对象的作用就是为了让所有的实例对象都能共享这个对象的属性和方法(当然实例本身的属性和方法优先级是高于原型的)。每个构造函数都会有一个默认的原型对象。我们只要在改原型对象上做文章就可以实现很多功能。

● 共享属性和方法:

Person.prototype.eyes = 2;
Person.prototype.walk = function ( ){……};var xiaoming= new Person(12, "xiaoming" );var xiaohong= new Person(12, "xiaohong" );
xiaoming.eyes
xiaohong.eyes // 小明和小红都有2只眼xiaoming.walk 
xiaohong.walk//小明和小红都会走路

● 原型链:
我们先做一个假设,假如我们把一个函数对象Man的原型直接给换成另一个函数对象Person的实例对象xiaoming会怎么样呢?
前面说了,通过实例对象是可以找到函数对象Person的原型。那我们现在Man对象的实例xiaoming是不是也就可以访问到Person对象的原型对象了呢。

function Man( ) {this.beard = "xxx";
}
Man.prototype = new Person( 23, "xiaoming" );
这里我们相当于把默认的那个原型给重写了,给参数其实就是给原型添加属性和方法var xiaoming = new Man();
xiaoming.beard //xxx 这里实例xiaoming自己的属性(小明有胡子)xiaoming.age //23xiaoming.name //xiaoming 这两个属性是实例的原型上面的属性(其实这个属性是Person实例的属性,但是现在的原型不就是Person实例吗)xiaoming.eyes //2 这个属性呢,是Person的原型对象上面的了

这里我们基本上都可以访问到,是不是有点继承的味道了。如果我们再这样搞一个对象,也这么干,这里是不是就感觉像条链一样。最顶端的对象是Object,也就是说到最后了。我们把这条链接方式叫做原型链。这也是继承的依据。

原文地址:https://www.cnblogs.com/Logo-TPM/p/6187852.html