关于原型问题

关于原型问题

麻烦老师讲解下__proto__、prototype、constructor这三者的关系,还有,Function.prototype和Object.prototype有什么关系?

正在回答

登陆购买课程后可参与讨论,去登陆

3回答

同学你好,可以这样理解的。祝学习愉快 ~

好帮手慕夭夭 2020-04-15 18:54:16

同学你好,那要问Object和Function的关系哦。参考如下理解:

1.要看一下 instanceof 规则。例如 A instanceof B ,  如果B在A的原型链中被发现,那么instanceof操作符将返回true,否则返回false。

在js中,所有对象的原型链根节点都是Object。例如如下:

数组和函数也可以叫做对象。原型链就是说,一个原型里面包含另一个原型,这样一层一层的形参了原型链

http://img1.sycdn.imooc.com//climg/5e96e18c0988837003560171.jpg

可以输出一下,顺着原型链找到最后一个原型,发现都是Object

http://img1.sycdn.imooc.com//climg/5e96e1f909f80bc207180334.jpg

所以任意一个对象使用instanceof测试,返回的都是true。Function本身也是一个对象,所以返回的是true。

http://img1.sycdn.imooc.com//climg/5e96e30f096f395204610134.jpg

http://img1.sycdn.imooc.com//climg/5e96e3c20913ce4d01470114.jpg

2.Object, Function等等这些都被称作是构造函,而所有的函数都是构造函数Function的实例。那么根据实例化的角度讲,只要顺着实例化对象Object原型链,就能找到创建它的Function构造函数。所以使用instanceof 去检测,也返回true。

可以看一下:

http://img1.sycdn.imooc.com//climg/5e96e71c093e9f3903370710.jpg

所以Object.__proto__.constructor==Function 。

http://img1.sycdn.imooc.com//climg/5e96e72e09213c9e06310049.jpg

如果我的回答帮助到了你,欢迎采纳,祝学习愉快~

  • 提问者 LeslieChan994 #1
    老师,我总结了下,大概是这么个流程,您看对不对: null<--proto--Object.prototype<--proto--Function.prototype<--proto--( Object<----obj Function<----fn Array<--arr ) Javascript中所有的对象都是Object的实例,并继承Object.prototype的属性和方法,也就是说,Object.prototype是所有对象的爸爸。 每个原型都有一个 constructor 属性指向关联的构造函数 实例原型指向构造函数。 Object instanceof Function的实质就是函数在Object的原型链上; Function instanceof Object的实质就是对象在Function的原型链上。
    2020-04-15 19:10:43
好帮手慕夭夭 2020-04-15 11:01:29

同学你好,问题解答如下:

1.prototype是构造函数上的属性,而__proto__是实例化对象的属性。例如如下:

http://img1.sycdn.imooc.com//climg/5e9672130917387a05250216.jpg

Person是构造函数,p是实例化对象。Person实例化之后,实例化对象p上的__proto__会继承构造函数Person的prototype。所以Person.prototype==p.__proto__ 。

http://img1.sycdn.imooc.com//climg/5e9672d3093df62f05340043.jpg

可以输出一下,返回true,说明它们相等:

http://img1.sycdn.imooc.com//climg/5e9672e9092b58c100950026.jpg

2.constructor(构造器)属性是原型对象上面的,它指向的就是构造函数。例如输出如下:

http://img1.sycdn.imooc.com//climg/5e967378096e317106000051.jpg

返回true,说明Person原型对象上面的constructor属性指向的就是构造函数Person:

http://img1.sycdn.imooc.com//climg/5e96739a0998b2aa01030025.jpg

3.Function.prototype是Function对象上的属性,Object.prototype是Object对象上的属性,Object和Function是js规定好的构造函数(构造函数也可以叫做对象),两个构造函数上各自的prototype没有关系。

http://img1.sycdn.imooc.com//climg/5e9677b3092cb9bf06310049.jpg

输出false:

http://img1.sycdn.imooc.com//climg/5e9677dd09c9a54101030034.jpg

如果我的回答帮助到了你,欢迎采纳,祝学习愉快~

  • 提问者 LeslieChan994 #1
    Function instanceof Object // ->true Object instanceof Function // ->true 这怎么理解?
    2020-04-15 16:55:25
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师