Javascript 访问窗口对象中的函数

Javascript 访问窗口对象中的函数,javascript,Javascript,如果我在控制台中键入:window['alert'],它将找到alert()函数 但是,如果我键入:window['location.replace'] 它将是未定义的。为什么我不能访问location.replace函数?replace()是在对象窗口中找到的函数。location或窗口['location'],因此您必须编写: window.location.replace 或 您需要的是窗口['location']['replace'](或窗口['location']]。replace)

如果我在控制台中键入:
window['alert']
,它将找到
alert()
函数

但是,如果我键入:
window['location.replace']

它将是
未定义的
。为什么我不能访问
location.replace
函数?

replace()
是在对象
窗口中找到的函数。location
窗口['location']
,因此您必须编写:

window.location.replace


您需要的是
窗口['location']['replace']
(或
窗口['location']]。replace


“位置.替换”不在“窗口”内。相反,“替换”在“位置”的内部,位置在“窗口”的内部。因此,必须按该顺序访问它。

因为它是一个对象结构,而不仅仅是带点的名称。您可以通过多种方式访问它:

window.location.replace
window["location"].replace
window["location"]["replace"]

等等……

位置功能在窗口下,但您可以直接使用此功能:
位置['replace']
如果您想继续
窗口['alert']
的逻辑,请使用
窗口['location']['replace']

访问
窗口['location.replace']
时,您正在访问的属性的名称是
location.replace
,而您需要的是被引用为window.location的对象的
.replace
属性

如果要通过所谓的“对象路径”访问对象,则需要构造一个函数,该函数将拆分对象路径
“location.replace”.split('..)
,然后使用递归或循环来访问要查找的属性

幸运的是,有一些软件包可以为你做这项工作,但是当然你需要考虑你是否需要一个完整的外部库(虽然很小)来完成你的任务。
查看有关括号表示法的更多信息。

假设我将所需函数作为字符串传递,例如
位置。替换存储在
回调中的
。我怎么称呼这个?作为
窗口[回调]()不起作用。事实上,我为此提出了一个新问题:
window.location.replace
window["location"].replace
window["location"]["replace"]