我一遍又一遍地读到全局变量和函数都很糟糕,必须不惜一切代价避免它们。但我一直无法做到这一点。我确定这个问题已被多次询问过,我已经阅读了它们,但我仍然不完全理解。
我有一个对象,有几个方法需要在特定事件上调用(例如按钮点击)。我可以在匿名函数中隐藏所有内容,但是一旦我这样做,我就不能再从外部调用对象中的方法了。避免这种情况的唯一方法是将对象暴露给全局空间,以便它可以调用对象中的方法。
她就是我的意思。
的JavaScript
(function () { // using anonymous function to conceal variables/functions
function Ninja (name) {
this.name = name;
this.hide = function () {
alert("Find me if you can!");
};
this.kill = function (target) {
alert(name + " killed " + target + ".");
};
}
this.myNinja = new Ninja (""); // ... but I need to expose the object to global space
})();
HTML
<button onclick="myNinja.hide()">Click Me</button>
如何防止事物变为全局,但仍然可以调用隐藏对象的方法?这甚至可能吗?
答案 0 :(得分:1)
为了防止对象全球化,您还应该在闭包内定义事件侦听器:
(function () { // using anonymous function to conceal variables/functions
// Ninja declaration
var ninja = new Ninja('');
document.getElementsByTagName('button')[0]
.addEventListener('click', function() {
ninja.hide();
}, false);
})();
附加事件处理程序的确切方法因浏览器而异,这应该适用于大多数现代浏览器。
答案 1 :(得分:0)
更改
this.myNinja = new Ninja ("");
到
window.myNinja = new Ninja ("");