如何创建可以在JS文件之外访问的全局javascript对象?
我在JS文件中有以下对象:如何创建可以在JS文件之外访问的全局javascript对象?,javascript,oop,Javascript,Oop,我在JS文件中有以下对象: var IOBreadcrumb = function IOBreadcrumb() { this.breadcrumbs = []; this.add = function(title, url) { var crumb = { title: title, url:url }; this.breadcrumbs.push(crumb); }; }; 在另一个JS文件中
var IOBreadcrumb = function IOBreadcrumb() {
this.breadcrumbs = [];
this.add = function(title, url) {
var crumb = {
title: title,
url:url
};
this.breadcrumbs.push(crumb);
};
};
在另一个JS文件中,我想利用这个对象:
//this occurs in some on click event
var breadcrumb = new IOBreadcrumb();
breadcrumb.add('some title',url);
console.log(breadcrumb.breadcrumbs);
我希望只有一个IOBreadcrumb实例,这样当我单击一个按钮时,它总是会将一个breadcrumb添加到数组中
我怎样才能做到这一点
var IOBreadcrumb = {
breadcrumbs: [],
add: function(title, url) {
var crumb = {
title: title,
url:url
};
IOBreadcrumb.breadcrumbs.push(crumb);
}
};
然后:
将以下内容作为页面执行的第一个javascript
(function(){
var setup = function IOBreadcrumb() {
this.breadcrumbs = [];
this.add = function(title, url) {
console.log('adding');
var crumb = {
title: title,
url:url
};
this.breadcrumbs.push(crumb);
}
};
window.IOBreadcrumb = new setup();
})(window);
这就是初始设置。现在从任何你能做的地方
IOBreadcrumb.add()
我已经测试过了
这样做的目的是将
window.IOBreadcrumb
分配给立即执行的函数的结果。由于此函数没有句柄,因此无法重新执行它。由于将IOBreadcrumb
放在窗口对象上,因此它实际上是全局的。我假设这是在浏览器中运行的;它不会在node.js或任何东西上运行,因为它依赖于窗口
另一个选项是使用,它的好处是保持面包屑真正私有。但并不是每个人都喜欢模块模式,因为它可以防止猴子补丁。当您使用库并且需要修改行为,但又不想编辑它们的源文件以减少升级时的麻烦时,这一问题尤其严重
var IOBreadcrumb=(函数(){
var breadcrumbs=[];
返回{
添加:函数(标题、url){
面包屑({
标题:标题,,
url:url
});
},
each:函数(回调){
对于(变量i=0;i
抱歉,epascarello是JS新手,可能是从一个不好的网站学到的。最佳实践是什么?它对页面上的所有脚本都是全局的-通过window.IOBreadcrumbor访问-从任何地方只需IOBreadcrumb.add()——请参阅我的更新答案
(function(){
var setup = function IOBreadcrumb() {
this.breadcrumbs = [];
this.add = function(title, url) {
console.log('adding');
var crumb = {
title: title,
url:url
};
this.breadcrumbs.push(crumb);
}
};
window.IOBreadcrumb = new setup();
})(window);
var IOBreadcrumb = (function() {
var breadcrumbs = [];
return {
add: function(title, url) {
breadcrumbs.push({
title: title,
url: url
});
},
each: function (callback) {
for (var i=0; i < breadcrumbs.length; i++) {
callback(breadcrumbs[i].title, breadcrumbs[i].url);
}
}
}
})();
IOBreadcrumb.add('title A', 'http://url.com/A');
IOBreadcrumb.add('title B', 'http://url.com/B');
IOBreadcrumb.add('title C', 'http://url.com/C');
IOBreadcrumb.each(function(title, url){
console.log('Title', title, 'Url', url);
});