所有对象都有自己的原型对象(prototype)
。一方面,任何一个对象,都可以充当其他对象的原型;
另一方面,由于原型对象也是对象,所以它也有自己的原型。因此,就会形成一个“原型链”(prototype chain)最终都可以上溯到Object.prototype Object.prototype对象有没有它的原型呢?
回答Object.prototype的原型是null。null没有任何属性和方法,也没有自己的原型。因此,原型链的尽头就是null。
为什么要有原型
就是为了解决共享属性问题
同一个构造函数创建的实例之间是无法共享属性的
判断对象是不是另一个对象的原型
instanceof
判断是不是原型的`实例````isPrototypeOf() || Object.getPrototypeOf()`判断是不是原型
hasOwnProperty() || in
判断是不是原型中的属性还是实例自己的属性
什么是proto
他是对象的一个属性
instance.constructor.prototype === instance.proto
实例的构造者就是构造函数, 构造函数原型就是等于实例的原型
用来表示所继承的原型是谁
JavaScript 中任意对象都有一个内置属性 [[Prototype]] ,在ES5之前没有标准的方法访问这个内置属性,但是大多数浏览器都支持通过proto来访问
现在已经废弃
不推荐使用
解释下constructor
constructor类似双向链表的front修改原型的时候也要修改constructor
prototype对象有一个constructor属性,默认指向prototype对象所在的构造函数。
constructor属性的作用是,可以得知某个实例对象,到底是哪一个构造函数产生的。