Javascript 为什么是';自我';是什么?

Javascript 为什么是';自我';是什么?,javascript,Javascript,我有一个框架页 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd"> <html> <head> <meta http-equiv="Content-type" content="text/html;charset=UTF-8"> <title>Main tit

我有一个框架页

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" 
"http://www.w3.org/TR/html4/frameset.dtd">

<html>
  <head>
     <meta http-equiv="Content-type" content="text/html;charset=UTF-8">
     <title>Main title</title>
    <script type="text/javascript" src="JS.js"></script>
  </head>
  <frameset rows="10%,90%" id="frameid" name="frameName">
     <frame src="FrameA.htm"     name="F_A">
     <frame src="FrameB.htm"     name="F_B">
  </frameset>
</html>
现在麻烦来了

1) 如果body标记中的onload子句如上所述是parent.ldfunc(),则“self”似乎是框架页,而不是页面A或页面B。即Id显示为框架Id

2) 如果onload子句是ldfunc(),但没有父级,则“self”按预期指向A页或B页。即id显示为idA或iadB

换句话说,self似乎遵循函数位置,而不是页面

为什么我要尝试这个?我将有几千页由A加载到B中,我想我可以消除将脚本放在每个标题中的需要


是否有某种方法使框架页面加载的脚本成为全局脚本并可用于其他页面?

该函数中的窗口不会动态引用。对窗口的引用是在声明函数时创建的,因此始终是对函数所在位置的窗口引用。当您在声明时基本上将外部引用嵌入到函数中时,这称为闭包

调用函数时,需要将上下文窗口作为参数传递

将脚本放入顶部框架/窗口中。 使用以下命令调用函数:

top.funcName();
并传递上下文

top.funcName(window);

+1.为了澄清,所有
self
都是
window
的一个属性,指向同一
window
。这对任何人都没有用。框架集页面没有窗口吗?只有带有正文的页面才有窗口吗?框架集页面是顶部框架/窗口,并且有窗口对象。顶部有文档吗?如何引用框架集上的名称和id?top是否根据上下文有不同的含义?例如,当我引用top.frames.length时它看起来像一个窗口,但当我引用top.F_.document时它是什么?top或window.top只是对最顶端窗口的引用(在本例中,包含框架集的html页面。因此,是的,它有一个可由top.document引用的文档。至于从另一个子框架引用子框架,请不要。让您的所有框架将自己介绍给顶级代码,并让顶级代码将它们相互介绍。避免直接访问,这只会使您的代码更复杂。)被解雇了。
top.funcName();
top.funcName(window);