2

如果我有我的应用程序的名称空间,如下所示:

var myApp = {};

(function() {
    var id = 0;
    this.next = function() {
        return id++;  
    };
}).apply(myApp);

然后,如果我记录以下结果:

console.log(myApp.next()); //1

如何在名称空间函数中存储变量,例如:

var myApp = {};

(function() {
    var id = 0;
    this.next = function() {
        return id++;  
    };

    // Store variables here ...
    this.variableStore = function() {
            var var1 = "One";
    };
}).apply(myApp);

尝试像这样访问:

console.log(myApp.variableStore().var1); // Gives me an error

这是可能的,甚至是一个好主意吗?或者我应该为本质上是全局变量的东西声明一个新的命名空间?

4

3 回答 3

2
var myApp = {};

(function() {
    var id = 0;
    this.next = function() {
        return id++;  
    };

    // Store variables here ...
    this.variableStore = function() {
            this.var1 = "One";
            return this;
    };
}).apply(myApp);

此类声明仅在调用后才会向对象添加var1属性:myAppvariableStore()

myApp.var1 //undefined
myApp.variableStore() // Object {...}
myApp.var1 //"One"

关于您的问题:您实际上不能在函数中存储变量。如果您尝试为 myApp 创建一个内部命名空间,请考虑执行以下操作:

(function() {
    var id = 0;
    this.next = function() {
        return id++;  
    };

    this.subNameSpace = {
        init: function () {
            this.var1 = "One"
            return this;
        }
    }
}).apply(myApp);
myApp.subNameSpace.init();
myApp.subNameSpace.var1; //"One"
于 2013-06-02T20:51:52.680 回答
2
(function() {
    var id = 0, var1; //DECLARE VARIABLE HERE
    this.next = function() {
        return id++;  
    };

    // Store variables here ...
    this.variableStore = function() {
            this.var1 = "One"; //NO "VAR" KEYWORD
    };
}).apply(myApp);

本地范围内使用var var1 = "One";创建,因此您无法从. 另外,记得使用; 否则该变量本质上是一个私有变量,不能从外部访问。var1myAppthis.var1var1

另外,如果你想使用

console.log(myApp.variableStore().var1);

然后你必须return myApp;在你的variableStore方法。这是因为myApp.variableStore()当前没有返回任何内容,因此您无法访问var1任何内容。所以,这里是完整的代码:

var myApp = {};
(function() {
    var id = 0, var1;
    this.next = function() {
        return id++;  
    };

    // Store variables here ...
    this.variableStore = function() {
            this.var1 = "One";
            return myApp;
    };
}).apply(myApp);
console.log(myApp.variableStore().var1);
于 2013-06-02T20:49:09.040 回答
1

你已经得到了一些关于如何使用你的variableStore函数的答案。但也许只用 -operator 存储变量就足够了.

var myApp = {};

(function() {
    var id = 0;
    this.next = function() {
        return id++;  
    };
}).apply(myApp);

//store:
myApp.var1 = "One";

//request:
console.log(myApp.var1); //One
于 2013-06-02T21:14:47.543 回答