JAVASCRIPT 构造函数和原型互相指向问题?求助!!!
大家讲道理
大家讲道理 2017-07-05 10:43:41
0
4
913

最近看js原型的问题,基本上已经理解,但是在控制台打开发现很奇怪的问题,举个例子

function Persion(){}; 
var persion1 = new Persion(); 
persion1;

在控制输入一下代码,按理说

persion1.__proto__ = Persion.prototype 

Persion.prototype 原型对象的构造器 指向 Persion(), 而构造函数 Persion里prototype又指向 原型对象,
js中是这样无线循环指向下去吗?是我理解有问题吗?

这是网上找的一副图,问题就在红色的那部分,这部分循环指向啊

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(4)
淡淡烟草味

谢邀,我刚关注了这个问题。。您就邀请我了。。

我只知道,这里确实就是循环引用,在浏览器上会不断的显示下去,但在内存里它就是一层的,所以不会有什么问题。

学霸

首先明确两个概念,引用变量 和 对象,在那一大段引用变量的互相引用中其实只涉及到两个对象
我们姑且把他们称为对象ObjP(原型对象)和对象Objf(函数对象)
对象objf中有一个属性p指向objp,q的内存结构有两部分,一部分保存着它的属性名“p”,另一部分保存着objp的地址。
同样,对象objp中有一个属性f指向objf。

打个比方,两个手机A,B,互相存着对方的手机号b,a。A可以通过A.b打给B,B可以通过B.a打给A,他们之间可以来回打无数次电话,但只存在两个手机。它们之间存在互相的联系,但联系本身占用的资源是很少的。只有打电话的时候才会产生附加的资源消耗。
我们看到的结构对浏览器是没有意义的,它只是把联系具象化给咱们看。就像如何向别人证明A存着B的手机号,当着你的面打个电话。你倒好,老让人家来回打。其实你不去继续往下点时,浏览器就不会去做那么无聊的事。
至于着“互相引用”什么时候到头?,没有所谓的头,存手机号就是一下的事儿,被逼着老来回打电话才是最痛苦的。
换句话说,等你不在往下点时浏览器就不用为了应付你让objp和objf继续“相互引用了”

女神的闺蜜爱上我

这个只是存在两个对象的相互引用. 我们可以构造这样的例子.

function A(){}
a = new A();
function B() {}
b = new B();
a.obj = b;
b.val = a;

结果就会出现:

实际上就只存在两个对象,只不过你每次展开那个属性的时候,应该是相当于打印那个对象,而你不断的交替打印对象 a 和 b,就会出现那样的结果.

滿天的星座

Person.prototype.constructor == Person //true
你在chrome控制台里输出的是 Person.prototype
你打开了 Person.prototype.constructor -->Person
又打开了 Person.protorype.constructor.prototype -->Person.prototype
又打开了 Person.prototype.constructor.prototype.constructor -->Person
又打开了 Person.protorype.constructor.prototype.constructor.prototype -->Person.prototype
.............

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!