Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
访问子名称空间中定义的javascript对象和导入到HTML中的js文件_Javascript_Javascript Namespaces - Fatal编程技术网

访问子名称空间中定义的javascript对象和导入到HTML中的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

如何访问命名空间中的对象。 我有一个导入脚本文件的html

一个脚本定义namesapce应用程序,另一个脚本将对象附加到该应用程序

如何访问对象并开始使用它

app.js personal.js

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');