博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
对原型链和原型以及构造函数的验证
阅读量:6803 次
发布时间:2019-06-26

本文共 1425 字,大约阅读时间需要 4 分钟。

开局先上一张图、分清楚函数与对象:

图片描述
得到结论:对象都有_proto_这个属性,但是只有函数对象才有prototype这个属性。

得出上面结论后我们再上一张图、我们对话题研究都是基于这张图:

图片描述

根据上图,自己些代码论证一下得出一下结论:const Foo =function(){};const Foo_prototype = Foo.prototype;const f1 = new Foo();Foo.prototype == Foo.prototype //trueFoo_prototype.constructor == Foo //true//1得出结论,Foo是一个函数对象,Foo的原型Foo_prototype的构造函数就是Foo本身f1.__proto__ == Foo.prototype // true//2得出结论,foo的实例指向f1的原型链上一个节点也就是Foo的原型Foo_prototype.__proto__ == Object;//true//3得出结论,Foo原型指向Foo的上一个原型节点const Object_prototype = Object.prototype;Object_prototype.__proto__ == null//true//4得出结论,Object的原型链上一个节点是null,这也就是万物皆对象,null中生对象const Function_prototype = Function.prototype;Object.__proto__ == Function_prototype//true//5得出结论,原生对象指向Function的原型,Function.__proto__ == Function_prototype;//true//6得出结论,Function的原型链的上一个节点是Function本身Foo.__proto__ == Function_prototype//true//7得出结论,Foo的原型链上一个节点指向Function

**经过上述代码验证得出如下结论:

1.所有对象都有_proto_这个属性。
2.所有的原型对象都有constructor属性,该属性对应创建所有指向该原型的实例的构造函数。
3.原型链的顶端是null。
图片描述**

**4.对象本身的prototype和_proto_毫无关系,_proto_指向原型链上一个节点的原型。

5.Function的原型链的上一个节点是Function本身(这个很奇怪哎)。**
OK,抛出一个问题:

//通常情况下,为了只继承父函数的原型而不继承其他静态方法往往这样定义b = function(){};c = function(){};b.prototype.say = 1;c.prototype.say = 2;function extend(father,son){  var def = function(){};  def.prototype = father.prototype;  son.prototype = new def();}extend(b,c)

问题:

1.继承的时候可以直接使用son.prototype = father.prototype 吗?
2.为什么要新建一个def函数,然后son继承def的原型来继承呢?
3.通过1方法和2方法生成的son是一样的吗?

转载地址:http://sfnwl.baihongyu.com/

你可能感兴趣的文章
...
查看>>
PPII打不开 更改I.bat
查看>>
开始学习了
查看>>
Javascript 控制 让输入框不能输入 数字
查看>>
[POJ] 食物链
查看>>
C/C++ extended python时一种常见的内存泄漏
查看>>
swift简介
查看>>
六度空间
查看>>
【分享】TCP 的那些事儿
查看>>
hdoj1205--吃糖果(鸽巢原理)
查看>>
SRM708 div1 PalindromicSubseq(动态规划+容斥原理)
查看>>
一些开源项目
查看>>
javascript 异步问题解决 Promise
查看>>
eclipse中mysql java驱动的安装
查看>>
期望文件系统格式在“1”到“3”之间;发现格式“4”
查看>>
Ajax笔记1
查看>>
[置顶] openHAB 体系结构与编程模型 (1) --- 术语
查看>>
day7异常处理
查看>>
Scrapy结构
查看>>
任何一款IDE的设计思路
查看>>