foo的原型是什么 控制器输出的代表什么意思?
首先我们创造的每个函数都会有一个 prototype(原型) 属性,该属性所指向的对象即我们所说的原型(对象)。而所有原型都有一个 constructor(构造函数) 属性,该属性指向我们所创造的函数。
当你把 foo.prototype 在控制台打印的时候,如果你把打印的内容展开,你应该可以看到两个属性:constructor 和 proto__(如果你是在chrome 或者 FF下)。这里的 constructor 就是之前说的构造函数属性,而 __proto 则是每个对象都会有的一个属性,是 js 内部用来查找原型链的属性
8 回答4.5k 阅读✓ 已解决
6 回答3k 阅读✓ 已解决
5 回答2.6k 阅读✓ 已解决
5 回答6.2k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
3 回答2.4k 阅读
4 回答2.7k 阅读✓ 已解决
1.控制台打印出来的
{constructor:f}是foo的prototype
属性,这个属性是一个对象,对象里面可以有很多方法或者属性,但是因为你自己定义的foo没有在foo.prototype
上添加属性或者方法,所以打印出来的的foo.prototype只有constructor
属性,这是一个自动存在的属性,指向原函数,所以可以看到“{constructor:f}”
,意思就是constructor
属性指向foo函数。2.你定义foo是一个普通函数,没有继承于某个函数,所以它的原型就是根据原型链往上走的话,是
Function.prototype
。从你的表达上面可以看出你没有分清楚原型和原型链的区别,foo.prototype并不能获取到foo的原型,应该用foo_proto_
,或者object.getPrototypeOf(foo)
来获取,prototype
只是函数的一个特殊属性,它指向了new
这个函数创造出来的对象的原型对象,但并不是原型,这里很容易混淆。另外给你推荐一篇论坛里写的关于原型和原型链的帖子,应该对你有帮助白话原型和原型链