Heim  >  Fragen und Antworten  >  Hauptteil

Problem damit, dass JAVASCRIPT-Konstruktor und Prototyp aufeinander verweisen? Helfen! ! !

Ich habe mir kürzlich das Problem des js-Prototyps angesehen und es im Grunde verstanden, aber als ich es in der Konsole geöffnet habe, habe ich ein sehr seltsames Problem festgestellt. Hier ist ein Beispiel

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

Geben Sie den Code in die Steuerung ein, es liegt auf der Hand

persion1.__proto__ = Persion.prototype 

Der Konstruktor des Prototypobjekts zeigt auf Persion(), und der Prototyp im Konstruktor Persion zeigt auf das Prototypobjekt. Persion.prototypeIst das eine Endlosschleife in js? Stimmt etwas mit meinem Verständnis nicht?

Dies ist ein Bild, das ich online gefunden habe. Das Problem liegt im roten Teil. Dieser Teil zeigt in eine Schleife

大家讲道理大家讲道理2635 Tage vor877

Antworte allen(4)Ich werde antworten

  • 淡淡烟草味

    淡淡烟草味2017-07-05 10:45:41

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

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

    Antwort
    0
  • 欧阳克

    欧阳克2017-07-05 10:45:41

    首先明确两个概念,引用变量 和 对象,在那一大段引用变量的互相引用中其实只涉及到两个对象
    我们姑且把他们称为对象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继续“相互引用了”

    Antwort
    0
  • 女神的闺蜜爱上我

    女神的闺蜜爱上我2017-07-05 10:45:41

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

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

    结果就会出现:

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

    Antwort
    0
  • 滿天的星座

    滿天的星座2017-07-05 10:45:41

    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
    .............

    Antwort
    0
  • StornierenAntwort