我正在编写一个抓取和数据输入程序,以节省我的妈妈和她的同事几个小时的脑力劳动,这是令人费解的重复表格提交。一切都进展顺利,直到我在提交按钮上调用了一个onclick函数。该函数(出于安全目的,我们将其称为dataLogger())将单个输入字段条目作为参数,然后...我不知道...,因为它引用的是本质上调用其父级构造函数的函数。像这样(函数名称已换出):

dataLogger(data) {
   if (parent)
        if (typeof(parent.dataLoggerP) == 'function')
            parent.dataLoggerP(data);


因此,我在此函数上设置了一个断点,并检查了Firebug中的“ dataLogger”对象。我想我只是看一下原型节点的子节点,查看父节点的“ dataLoggerP”函数,搜索该函数定义,然后解决我的问题。但是有趣的事情发生了。我将在Watch Expressions中的firebug中单击prototype:节点,然后在其中看到两个节点:constructor: dataLogger(data)__proto__:。我打开constructor: dataLogger(data)节点只是发现它是原始dataLogger对象的副本!在那个里面,还有另一个……另一个……无限。就像是mc escher的画...

我不知道这是怎么回事,或者它是如何工作的……对此的任何见解都将不胜感激。

最佳答案

constructor是创建对象的函数。从继承的意义上说,它不是父母。更好的是,parent不是对象的父级,它(除非另有定义)是窗口的父级(如果有框架或iframe)。如果未定义其他任何代码,则该代码应查看父窗口(如果存在)是否具有dataLoggerP函数(不是对象),如果有,则执行它。如果没有父窗口,或者没有定义dataLoggerP函数,则不会发生任何错误,这是因为所有窗口都封装在检查中。

10-06 15:43