JAVASCRIPT 构造函数和原型互相指向问题?求助!!!
问题描述
最近看js原型的问题,基本上已经理解,但是在控制台打开发现很奇怪的问题,举个例子
function Persion(){}; var persion1 = new Persion(); persion1;
在控制输入一下代码,按理说
persion1.__proto__ = Persion.prototype
Persion.prototype 原型对象的构造器 指向 Persion(), 而构造函数 Persion里prototype又指向 原型对象,js中是这样无线循环指向下去吗?是我理解有问题吗?
这是网上找的一副图,问题就在红色的那部分,这部分循环指向啊
问题解答
回答1:谢邀,我刚关注了这个问题。。您就邀请我了。。
我只知道,这里确实就是循环引用,在浏览器上会不断的显示下去,但在内存里它就是一层的,所以不会有什么问题。
回答2:首先明确两个概念,引用变量 和 对象,在那一大段引用变量的互相引用中其实只涉及到两个对象我们姑且把他们称为对象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继续“相互引用了”
回答3:这个只是存在两个对象的相互引用. 我们可以构造这样的例子.
function A(){}a = new A();function B() {}b = new B();a.obj = b;b.val = a;
结果就会出现:
实际上就只存在两个对象,只不过你每次展开那个属性的时候,应该是相当于打印那个对象,而你不断的交替打印对象 a 和 b,就会出现那样的结果.
回答4: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.............
相关文章:
1. mysql - 数据库:获取两个字段与获取*,传输的数据量差距大吗?2. DADB.class.php文件的代码怎么写3. html5 - 在HBuilder中打包Android的apk包出错,不知道是什么原因。4. JavaScript如何循序渐进,有效的学习?看不下去怎么办?5. 老师 我是一个没有学过php语言的准毕业生 我希望您能帮我一下6. javascript - 连续点击触发mouseleave事件7. python - 通过正则提取出来的ip,怎么命名8. angular.js - angularjs 与requirejs集成9. 求解答:访问不了虚拟服务器的问题?10. html - node.js中base标签中href的问题