我有一个包含以下代码的javascript文件:
(function () {
var cookieconsent = {
dismiss: function (evt) {
evt.preventDefault && evt.preventDefault();
evt.returnValue = false;
this.setDismissedCookie();
this.container.removeChild(this.element);
},
setDismissedCookie: function () {
Util.setCookie(DISMISSED_COOKIE, 'yes', this.options.expiryDays, this.options.domain, this.options.path);
}
};
})();
如何访问该功能" dismiss"来自,比方说,浏览器的控制台或页面上的href链接?
这是文件的来源:Cookie Consent - GitHub
谢谢!
答案 0 :(得分:2)
您不能,因为该变量是在执行此脚本时调用的匿名函数的范围中定义的。但是,您可以更改代码,使变量可以访问:
(function (global) {
global.cookieconsent = {
...
};
})(this);
答案 1 :(得分:2)
变量只能在其范围内访问。所以,如果你这样做
function helloWorld(){
var test = "Test";
}
test
仅在helloWorld
内可用。
当你这样做时
var test = "test";
function notify(){
console.log(test);
}

test
将被访问,因为它在更高的范围内定义。
当您在JS文件中执行相同操作时,由于此变量未包含在函数内,因此它将成为全局范围(window
)的一部分,因此它们随处可用。
如果您希望将变量设为全局变量,则可以使用window.variableName
并访问它。
注意:污染全球范围是一种不好的做法。请参阅Why are global variables considered bad practice?
另外,如果您希望在HTML元素上绑定一个函数,请尝试
document.getElementById("elementId").addEventListener("click", cookieconsent.dismiss)
关于在控制台上访问它,尝试在控制台中记录它,然后您可以使用chrome调试器将记录的对象保存在全局对象中并进行测试。
答案 2 :(得分:1)
只需删除var
关键字,然后从全局上下文中将该函数作为cookieconsent.dismiss
访问。请参阅@Pointy对您问题的评论。
答案 3 :(得分:1)
我想你可以尝试一些不同的方法:
(function () {
window.cookieconsent = {
dismiss: function (evt) {
evt.preventDefault && evt.preventDefault();
evt.returnValue = false;
this.setDismissedCookie();
this.container.removeChild(this.element);
},
setDismissedCookie: function () {
Util.setCookie(DISMISSED_COOKIE, 'yes', this.options.expiryDays, this.options.domain, this.options.path);
}
};
})();
cookieconsent.dismiss();