我想了解一件事。我有这个功能:
给定代码
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();
}
但我觉得有更好的方法可以做到这一点。有吗?
答案 0 :(得分:2)
您可以使用bind
并提供myVar
作为上下文来实现。此外,您需要返回该函数,因为您打算将其用作事件处理程序
function myFunc(display, x) {
return display.bind(x);
}
Function.bind
的第一个参数接受一个对象,该对象在代码执行时将被设置为上下文。
bind()方法创建一个新函数,当被调用时,它具有它 此关键字设置为提供的值,具有给定的序列 调用新函数时提供的任何参数。
答案 1 :(得分:1)
这将是我的解决方案。不知道它是否有用。
var init = {
name : "myName",
display : function () {
alert(name);
}
};
document.onclick = function() {
init.display();
};