此范围是指窗口

This scope, refers to window

本文关键字:窗口 范围是      更新时间:2023-09-26

我试图理解一件事。我被赋予了以下功能:
给定代码

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()功能,显示"我的名字"。当我在display_it()内登录this时,它指的是窗口对象。

我的尝试
我得到的唯一"坏主意"是在myFunc里面放这样的东西:

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

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

您可以通过使用 bind 并提供myVar作为上下文来做到这一点。您还需要返回函数,因为您打算将其用作事件处理程序

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

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

多核

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

这将是

我的解决方案。不知道是否有帮助。

var init = {
  name : "myName",
  display  : function () {
         alert(name);      
    }
};
document.onclick = function() {
  init.display();
};

现场示例:http://liveweave.com/ZWUwCu