JavaScript:在属性';s事件侦听器

JavaScript:在属性';s事件侦听器,javascript,oop,object,closures,dom-events,Javascript,Oop,Object,Closures,Dom Events,在属性的事件侦听器函数中调用私有函数的最佳方法是什么 JavaScript对象: function dog() { /* dog's private attribute: noseButton */ var noseButton = $("#dog-nose-btn"); noseButton.click(function() { // bark(); }); /* private function bark() */

在属性的事件侦听器函数中调用私有函数的最佳方法是什么

JavaScript对象:

function dog() {
    /* dog's private attribute: noseButton */
    var noseButton = $("#dog-nose-btn");
    noseButton.click(function() {
        // bark();
    });

    /* private function bark() */
    function bark() {
        console.log('woof!');
    }
}

那么,在noseButton的click事件侦听器中调用
bark()
函数的最合适方法是什么呢?闭包?

如果需要像这样向函数传递一些参数:

function bark(args1, args2) {}
然后,您应该在单击的上下文中调用它:

noseButton.click(function() {
        // bark();
    });
否则,如果只传递一个参数,则无需执行以下操作:

noseButton.click(bark)
通过这种方式,如果使用此单个参数,它将被解释为事件

因此anwser是,它取决于您将传递多少个参数。

尝试以下方法:

var dog = (function() {
    return {
        bark: function() {
            console.log('woof!');
        }
    };
})();

function dog() {
    /* dog's private attribute: noseButton */
    var noseButton = $("#dog-nose-btn");
    noseButton.click(function() {
        // bark();
        dog.bark();
    });

}
关闭是安全的,建议使用如何处理代码的私有部分


我希望这能有所帮助。

还有哪些其他方法/途径可以做到这一点?你发现这有什么缺点?实际上除了闭包,我不知道其他的方法。你会怎么做?缺点:只是寻找正确的方法。你是对的(在一个参数的情况下)。明显的谬误。所以我现在的问题解决了。谢谢拉多尼里娜。但是“在单击的上下文中调用它”(如果有多个参数)的确切含义是什么?
click(function(){bark()})
function(){}
into click是一个上下文如果有多个对象属性,例如“wag”,该怎么办?你会在报税表中用逗号分隔吗?在Java中有一个对象/一个类,但这里有一个类(function dog()),另外还有变量var dog。这就是为什么我试图在dog类中保留任何与对象相关的内容。是的,所有可以指定为键:值对的附加函数和属性。并用逗号分隔。实际上,您是从闭包返回js对象。