访问子名称空间中定义的javascript对象和导入到HTML中的js文件
如何访问命名空间中的对象。 我有一个导入脚本文件的html 一个脚本定义namesapce应用程序,另一个脚本将对象附加到该应用程序 如何访问对象并开始使用它 app.js personal.js访问子名称空间中定义的javascript对象和导入到HTML中的js文件,javascript,javascript-namespaces,Javascript,Javascript Namespaces,如何访问命名空间中的对象。 我有一个导入脚本文件的html 一个脚本定义namesapce应用程序,另一个脚本将对象附加到该应用程序 如何访问对象并开始使用它 app.js personal.js function(app){ if (app) { app.Cache = function(nativeStorage,serializer ) { this.storage = nativeStorage; this.seri
function(app){
if (app) {
app.Cache = function(nativeStorage,serializer ) {
this.storage = nativeStorage;
this.serializer = serializer;
}
app.Cache.prototype = {
setItem: function( key, value ){
this.storage.setItem(key, this.serializer.stringify( value ));
return( this );
}
};
var personalcontentstorage = new app.Cache(localStorage,JSON);
} else {
alert("app is undefined!");
}
})(app);
myhtml.html
如何访问对象personalcontentstorage,以便我可以使用其方法。在访问对象时,我遇到一个未定义的错误。我无法以上面所述的方式访问对象。app.js中存在问题,app变量与您认为的不同:
var app = (function(jQuery){
// function body
})(jQuery);
分配给app的是自执行匿名函数在等号后的返回值。如果jQuery为false,则为未定义或null。您必须让函数返回要分配给应用程序变量的内容。您不能只引用在另一个类似范围中声明的变量。这就是范围存在的原因。如果要获取personalcontentstorage变量,只需返回它:
// assign your IIFE to a variable
var something = (function(app){
if (app) {
// snip
return new app.Cache(localStorage,JSON);
} else {
alert("app is undefined!");
}
})(app);
jQuery(document).ready(function() {
// use the variable your IIFE's return was stored in
something.setItem("mykey","myValue") ;
});
从personal.js函数返回它怎么样
var Personal = (function(app) {
if (app) {
app.Cache = function(nativeStorage, serializer) {
this.storage = nativeStorage;
this.serializer = serializer;
}
app.Cache.prototype = {
setItem: function(key, value) {
this.storage.setItem(key, this.serializer.stringify(value));
return (this);
}
};
var personalcontentstorage = new app.Cache(localStorage, JSON);
} else {
alert("app is undefined!");
}
return {
storage: personalcontentstorage
};
}(app));
然后在HTML文件中,您只需引用:
Personal.storage.setItem("myKey", "myValue");
不确定这是否正是你想要的。你的代码很难阅读,而且你自己也承认它不是你的代码,只是某种类似的东西。请尽量用结构良好、功能性较强的代码发布您的问题:- 如果在函数内定义变量,则该变量在函数外不可见,例如
(function () {
var foo;
}());
// foo is not visible here
在任何地方都可见的唯一变量是全局变量,或者更准确地说,是全局对象的属性,在浏览器中是窗口。这些可通过三种方式定义:
使用var,但不要在函数中使用:
var foo;
(function () {
// foo is visible here
}());
// foo is also visible here
将变量显式附加到窗口对象:
第一次为变量赋值时不要使用var。这绝对是错误的做法:阅读代码的人并不清楚您打算创建一个全局变量
全局变量有各种风险和缺点。如果在页面中包含第三方脚本,它们可能使用相同的全局变量名,并干扰您自己的脚本。通常最好将使用的全局变量数量保持在绝对最小
我经常使用这种模式,创建一个全局变量来包含项目的所有代码,您可以用项目名称替换MySite:
// Create a global variable that can contain everything else
window.MySite = {};
// Add something to the namespace
MySite.foo = (function () {
// Code that isn't visible globally here
return someValueForFoo;
}());
// Elsewhere in my code I can easily access `someValueForFoo`:
MySite.foo
将此应用于您的项目:
window.MySite = {};
// In app.js
MySite.App = (function (jQuery) {
// ...
}(jQuery));
// In personal.js
MySite.storage = (function (jQuery) {
// ...
return new MySite.App.Cache(localStorage,JSON);
}(jQuery));
// Elsewhere in your code
MySite.storage.setItem('foo', 'bar');
init:函数{在你的app.js定义中是一个语法错误。检查你的控制台。我放在这里考虑的代码是伪代码,我的原始app.js是一个巨大的文件,它工作正常。我希望使用personal.js中定义的对象的方法用于html的dom ReadyTanks中,作为一名java开发人员,所有这些都用于反馈在一个快节奏的项目中,您的反馈确实帮助我正确理解了JS的概念:您刚刚编辑了这个问题以添加返回值,所以我不确定这个答案是否适用。我也不确定返回值是否在最初的代码中,或者您是否只是在我的回答之后才添加它……非常感谢您或者解决方案/建议,它解决了我的问题。从一开始我就知道这是一个与范围相关的问题。在工作中学习JS,我感到非常困惑。这肯定会增加我的经验
(function () {
window.foo = 7;
}());
// foo is visible here
// Create a global variable that can contain everything else
window.MySite = {};
// Add something to the namespace
MySite.foo = (function () {
// Code that isn't visible globally here
return someValueForFoo;
}());
// Elsewhere in my code I can easily access `someValueForFoo`:
MySite.foo
window.MySite = {};
// In app.js
MySite.App = (function (jQuery) {
// ...
}(jQuery));
// In personal.js
MySite.storage = (function (jQuery) {
// ...
return new MySite.App.Cache(localStorage,JSON);
}(jQuery));
// Elsewhere in your code
MySite.storage.setItem('foo', 'bar');