Javascript POO:可以将对象方法放在 onclick 中吗?

Javascript POO : it is possible to put a object method in an onclick?

我想在 onclick 中放置一个对象方法,但我的代码不起作用。

代码在这里,非常简单:

<script type="text/javascript">

//The constructor :
function Foo()
{   
    /*Create a div element and add it to the document :*/
    div_element = document.createElement("div");
    document.body.insertBefore(div_element, null);

    /*Create a method for hidding div element :*/
    this.hide = function()
    {
        div_element.style.display = "none";
    }

    /*Insert button inside the div element. This button contains the method this.hide() in an onclick for hidding the div element :*/
    div_element.innerHTML = '<input type="button" value="Hide" onclick="this.hide();">';
}

foo = new Foo();

</script>

但是按钮中的方法 this.hide() 没有 work.You 可以尝试这里的代码:https://jsfiddle.net/0s5smd52/

你有想法吗?

在此先感谢您,诚挚的

您的 hide() 函数的范围是您的 Foo() 对象。如果您以现在的方式将它添加到输入中,它将在全局范围内进行解释,并且 this.hide() 实际上意味着 window.hide(),它不存在。

此问题的解决方案是创建新输入,设置 onclick 处理程序,然后将其添加到 DOM。

此外,在变量前使用 var,这样它们就不会污染全局范围。

function Foo()
{   
    var div_element = document.createElement('div');

    this.hide = function()
    {
        div_element.style.display = 'none';
    }

    // create hide button
    var btn = document.createElement('input');
    btn.type = 'button';
    btn.value = 'Hide';
    btn.onclick = this.hide;

    // add it to the div
    div_element.appendChild(btn);

    // add everything to the DOM
    document.body.insertBefore(div_element, null);
}

foo = new Foo();

this.hide() 中的 this 是对 div_element 而非 foo 的引用。

为了在点击后调用方法hide,您需要使用闭包、全局变量或方法绑定。

在您的代码中,foo 是一个全局变量,因此 foo.hide() 应该有效。