在ES2019中 对于prototype的定义为浏览器
给其它对象提供共享属性的对象markdown
看完后 忽然想到了一句话 Vue中一切组件继承自Vue的原型app
这也解释了为何在每一个组件中均可以直接使用Vue的一些方法 由于这些方法被写在了Vue的原型上ide
原型对象被建立时,会自动生成一个 constructor
属性,指向建立它的构造函数函数
构造函数的prototype
指向原型对象性能
实例对象的__proto__
指向原型对象ui
(注)若是在MDN上查阅__proto__
这一属性 你能够看到lua
已废弃 该特性已经从 Web 标准中删除,虽然一些浏览器目前仍然支持它,但也许会在将来的某个时间中止支持,请尽可能不要使用该特性。url
警告: 经过现代浏览器的操做属性的便利性,能够改变一个对象的 [[Prototype]] 属性, 这种行为在每个JavaScript引擎和浏览器中都是一个很是慢且影响性能的操做,使用这种方式来改变和继承属性是对性能影响很是严重的,而且性能消耗的时间也不是简单的花费在 obj.proto = ... 语句上, 它还会影响到全部继承来自该 [[Prototype]] 的对象,若是你关心性能,你就不该该在一个对象中修改它的 [[Prototype]]。相反, 建立一个新的且能够继承 [[Prototype]] 的对象,推荐使用 Object.create()。spa
警告: 当Object.prototype.proto 已被大多数浏览器厂商所支持的今天,其存在和确切行为仅在ECMAScript 2015规范中被标准化为传统功能,以确保Web浏览器的兼容性。为了更好的支持,建议只使用 Object.getPrototypeOf()。
官网说的很明白 若是还不理解 看完下面原型链的做用 你应该就明白了
这一部分 看着比较绕 可是理解后 对咱们仍是颇有帮助的 好比原型链的做用
原型链的做用: 原型链如此的重要的缘由就在于它决定了 JavaScript
中继承的实现方式。
当咱们访问一个属性时,查找机制以下:
访问对象实例属性,有则返回,没有就经过 __proto__
去它的原型对象查找。
原型对象上找到即返回,找不到,继续经过原型对象的 __proto__
查找。
一层一层一直找到 Object.prototype
,若是找到目标属性即返回,
找不到就返回 undefined
,不会再往下找,由于在往下找 __proto__
就是 null
了。
因此 若是咱们用Object.prototype.__proto__
去操做了Object的原型对象 那么全部的对象都会受到影响 由于Object是对象的顶级父类 全部的对象都继承自它们的顶级父类Object