prototype显示原型,__proto__是隐式原型
prototype
prototype 对象是存放继承特征的地方,由于javascript没有提供一种方法去确定哪个函数时打算用来做构造函数的,所以每个 函数
(划重点是函数对象) 都会得到一个 prototype 对象。这一点要排除用 Function.prototype.bind()
方法构造出来的函数,这是个例外,他没有prototype 属性
进一步解释:prototype属性是一个指针,指向一个对象,这个对象的用途是包含所有实例共享的属性和方法(我们把这个对象叫原型对象)。原型对象又有一个属性,叫做 constructor
,这个属性包含了一个指针,指回原构造函数
原型对象
原型对象 HAS constructor
constructor ----> Foo()
prototype作用
(1)实现实例间的属性共享
(2)实现基于原型继承
proto
现代浏览器把对象内部属性 [[Prototype]]
用 proto 的形式暴露出来。几乎任何对象都有一个 [[Prototype]] 属性,在标准中这是一个隐藏属性。该属性指向的是这个对象的原型
new的执行过程
var obj = new Foo()
实例和构造函数之间是没有直接关系的