JavaScript - 获取父对象

时间:2013-09-27 21:40:58

标签: javascript object data-structures

我最近想要探索一些JavaScript的数据结构,并且我意识到我没有一个简单的方法来做到这一点。例如,以下代码:

var a="asdf";

问题是,a在自己的空间中不存在。它实际上成为window对象的属性。这导致了一些问题,例如“有什么东西拥有窗口对象吗?”并且“控制台是一个附加到窗口的对象吗?”

我认为能够看到变量或对象的父对象(假设它存在)会非常好。有没有办法让控制台告诉你这个?

3 个答案:

答案 0 :(得分:2)

每个javascript环境都有某种全局对象,它“拥有”全局变量和任何其他全局可访问的东西。在浏览器javascript环境中,此全局对象是window对象。正如您所发现的,浏览器中的所有全局变量实际上都是window对象的属性。在其他javascript环境(如服务器端JS)中,全局对象不是窗口对象,但仍然存在一个类似的全局对象(尽管它上面没有相同的内置浏览器窗口属性)。 / p>

没有通用的方法来查询变量并找出它包含的对象是什么。并且,在某些情况下(例如函数中的局部变量),没有可访问javascript的包含对象,您可以从中访问变量。

window对象本身基本上由浏览器拥有或控制。每次浏览器打开新的浏览器窗口或选项卡时,它都会创建一个新的窗口对象。然后,它将文档加载到该窗口对象中以供显示,然后windowdocument对象可供该页面中的javascript访问。

答案 1 :(得分:1)

  

“有什么东西拥有窗口对象吗?”

是的,window对象! :-)试试这个:

window.window === window; // true

这很有趣,但这并不意味着window实际上“拥有”了自己。它包含对自身的引用,称为window,这就是使window对象全局可用的原因。

  

控制台是一个附加到窗口的对象吗?

  

我认为能够看到变量或对象的父对象(假设它存在)会非常好。

这只能在全局(window)范围内实现。但是你总是可以创建自己的对象并将它们用作命名空间。

答案 2 :(得分:-1)

使用命名空间。

有很多关于它的文章。例如,here

定义命名空间:

var AppSpace = AppSpace || {};

然后将在此命名空间下创建所有变量:

AppSpace.Podcast = function {
    this.title = 'Astronomy Cast';
    this.description = 'A fact-based journey through the galaxy.';
    this.link = 'http://www.astronomycast.com';
};

AppSpace.Podcast.prototype.toString = function() {
    return 'Title: ' + this.title;
}

现在这些变量不会污染window对象。如果页面中包含的JS文件碰巧在window下使用相同的变量名称,通常是避免可能的名称冲突的好习惯。