我正在编写一个抓取和数据输入程序,以节省我妈妈和她的同事数小时的重复表单提交时间。一切都很顺利,直到我在提交按钮上调用了这个 onclick 函数。该函数(出于安全目的,我们将其称为 dataLogger() )将单个输入字段条目作为参数,然后……我不知道……因为它指的是一个本质上调用其父构造函数的函数。 . 像这样(函数名称被换出):
dataLogger(data) {
if (parent)
if (typeof(parent.dataLoggerP) == 'function')
parent.dataLoggerP(data);
所以我在这个函数上设置了一个断点,并检查了 firebug 中的“dataLogger”对象。我想我只需要查看原型(prototype)节点的子节点,查看父节点的“dataLoggerP”函数,搜索该函数定义,然后解决我的问题。但是有趣的事情发生了。我会在 Watch Expressions 中单击 firebug 中的 prototype:
节点,然后看到其中的两个节点:constructor: dataLogger(data)
和 __proto__:
。我打开 constructor: dataLogger(data)
节点才发现它是原始 dataLogger 对象的副本!在那个里面,还有另一个……另一个……直到无穷大。就像mc escher的画...
我不知道发生了什么,也不知道它是如何工作的……非常感谢任何对此的见解。
最佳答案
constructor
是创建对象的函数。它不是继承意义上的父级。更好的是,parent
不是对象的父对象,它是(除非另有定义)window(如果您有框架或 iframe)的父对象。如果没有其他定义,这段代码应该查看父窗口(如果存在)是否具有 dataLoggerP
函数(不是对象),如果有,则执行它。如果没有父窗口,或者如果它没有定义 dataLoggerP
函数,则什么也不会发生,也没有错误,因为它都包含在检查中。
关于javascript - 作为自身父对象的 javascript 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25597443/