这个范围,指的是窗口

时间:2014-12-21 16:13:44

标签: javascript scope window this

我想了解一件事。我有这个功能:
给定代码

function initfunc() {
    var myVar= {
        name : "My name."
    };

    function display_it() {
        //console.log(this); //commented out, window
        alert(this.name);
    }
    document.onclick = myFunc(display_it, myVar);
}

initfunc();

function myFunc(display, x)
{
     //make it say My name.!
}

现在我正在尝试制作display_it()功能,以显示“我的名字”。当我在this内记录display_it()时,它引用了窗口对象。

我的尝试
我得到的唯一“坏主意”是在myFunc内添加类似的东西:

function myFunc(display, x)
{
    window.name = context.name;
    func();
}

但我觉得有更好的方法可以做到这一点。有吗?

2 个答案:

答案 0 :(得分:2)

您可以使用bind并提供myVar作为上下文来实现。此外,您需要返回该函数,因为您打算将其用作事件处理程序

function myFunc(display, x) {
   return display.bind(x);
}

Function.bind的第一个参数接受一个对象,该对象在代码执行时将被设置为上下文。

MDN

  

bind()方法创建一个新函数,当被调用时,它具有它   此关键字设置为提供的值,具有给定的序列   调用新函数时提供的任何参数。

答案 1 :(得分:1)

这将是我的解决方案。不知道它是否有用。

var init = {
  name : "myName",

  display  : function () {
         alert(name);      
    }
};

document.onclick = function() {
  init.display();
};

实例:http://liveweave.com/ZWUwCu