prototype和__proto__的联系和区别

function foo(){}

foo.prototype;
//返回一个Object,里面有constructor:foo()和__proto__:Object

foo.__proto__;
//返回一个function(),里面有一些方法,也有__proto__:Object

想知道两者的联系和区别,看完其他问题之后觉得更糊涂了,觉得答案都统一不起来

阅读 4.7k
9 个回答

一个对象的prototype是指这个对象的创造者的原型,一个对象的__proto__是指这个对象的创造者。在js中一切皆对象。当你申明一个function时,它的创造者是Function,他的创造者Function的原型是Object.

1.foo.prototype; 这里的foo是一个构造函数Foo
2.foo.__proto__; 这里的foo是构造函数的一个实例 var foo = new Foo()
3.每一个构造函数的原型prototype,包含指向构造函数的指针constructor和指向原型的指针__proto__

新手上路,请多包涵

简单来讲:

  1. foo.prototype: prototype是foo的一个属性,仅此而已,而它是所有foo实例的原型;
  2. foo.__proto__: foo的原型,具体到你的例子,是Function

P.S. 事实上,这种问题可大可小,建议去看看“JS原型”相关的内容,推荐看红皮书《Javascript高级程序设计》

这是js原型继承相关的内容,你上网搜一下js原型继承,很多的

很好的一个提问,我让它成为一个面试题目

联系:同属于foo对象的属性

区别:指代不同
foo.prototype指向foo函数对象的prototype对象(自己的小兵),
foo.__proto___指向Function函数对象的prototype对象(创建者)

推荐问题
宣传栏