如何理解prototype和__proto__的区别呢?

如何理解prototype和__proto__的区别呢?

阅读 3.5k
6 个回答

构造函数访问原型时,通常通过prototype来访问,例如我们往原型上添加方法

Person.prototype.getName = function() {}

当new出来的实例访问原型时,在一些支持的浏览器中

function Person() {}

var p1 = new Person();

p1.__proto__ === Person.prototype   // true

结论:prototype是作为构造函数去访问原型,而__proto__是作为实例去访问原型。当自身身份不一样,即使一个方法同时调用两者时,访问到的可能是不同的原型。

每个对象都有__proto__,而prototype只有Function有;

prototype 是构造函数的一个属性,__proto__ 是实例的一个属性。使用构造函数生成的实例的 __proto__ 属性会指向构造函数 prototype 属性所指向的对象。

嗯,就是这样。

从作用上来说:
prototype 确定了当利用构造器或字面量形式定义对象时 __proto__ 的默认值

__proto__ 是 js 引擎原型链搜索的依据

所以重点在于当你要更改原型链的搜索方式时,可以通过更改构造器 prototype 来改变后续所有实例化对象的原型链查找方式,利用 __proto__ 来修改单个对象的原型链查找.

Prototype是函数的方法,__proto__是一个经过实例化的对象的方法,它们的作用是一样的,都是指向原型链。

function Fruit() {};
var apple = new Fruit();

apple.__proto__ === Fruit.prototype;  // true
apple.constructor === Fruit.prototype.constructor  // true

constructor也是同理。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题