假设顶部窗口中有一个功能。例如:
function z() { alert(window.name); }
我们还要说这个文档中有一个iframe(同源)。
顶部窗口中的函数是否可以在另一个窗口的上下文中执行此函数,以便显示iframe的名称而不是顶部窗口?
换句话说,全局对象如何绑定到一个函数并且可以更改?
无效的天真尝试:https://jsfiddle.net/wos2o3gx/(显示两个调用的顶部)。
答案 0 :(得分:10)
全局对象如何绑定到函数并且可以更改?
函数的全局上下文在创建函数时确定,即使您将该函数作为另一个window
上下文的属性,也不会更改。有动态替代方案,例如用window
替换this
,但由于this
并不总是设置为全局对象(例如在严格模式下),我建议传递{{ 1}}变量到你的函数:
window
function z (window) {
window = window || self
console.log(window.name)
}
window.name = 'w top'
z()
var iframe = document.getElementById('iframe')
iframe.contentWindow.name = 'w iframe'
z(iframe.contentWindow)
答案 1 :(得分:4)
您可以在示例中使用this
代替window
,如下所示:
function z() {
alert(this.name);
}
window.name = 'w top';
z();
var iframe = document.getElementById('iframe');
frame.contentWindow.name = 'w iframe';
frame.contentWindow.z = z;
frame.contentWindow.z();
答案 2 :(得分:4)