【问题标题】:Javascript varibles across functions跨函数的 Javascript 变量
【发布时间】:2015-07-02 03:23:24
【问题描述】:

作为练习,我在同一个命名空间(命名空间为示例)中编写代码:

if ("undefined" == typeof(sample)) {
    var sample = {};
}

sample = {
    foo : function () {

    },

    bar : function () {

    }
};

如何在同一个命名空间中创建一个所有函数都可以访问的变量?

【问题讨论】:

  • 在这种情况下什么是“命名空间”?
  • 本例中的命名空间为“sample”

标签: javascript


【解决方案1】:

我假设您正在尝试访问示例命名空间内的变量。为此,您将变量声明在与函数相同的级别,并在函数内部使用关键字 this

访问它
sample = {
    myVar:10; // this is your variable
    foo : function () {
        return this.myVar++;  // use this keyword to access it.
    },

    bar : function () {

    }
};

注意:如果要在函数内部创建函数(闭包),则需要为 this 关键字创建别名(如 _self),这样上下文就不会被覆盖在你的新函数中。

【讨论】:

  • sample.myVar 会比this.myVar 更安全。可以使用callapplybindf = sample.foo; f() 更改this 的值。
  • 嗯,这取决于你如何使用它。我通常这样使用它: var obj = Object.create(sample);创建对象的实例。在这种情况下,如果您使用示例,您将访问全局对象而不是实例属性。 this 的值可能会改变,但是当我建议在进入闭包之前为“this”创建别名时,下面的注释中已经涵盖了这一点。你提到的情况也可以这样说,但很好。
【解决方案2】:

另一种选择:

(function(){

    //Constructor
    function Sample(name) {
        this.sampleName = name;
    }

    Sample.prototype = {
        foo: function() {
           this.sampleName = "otherSample";
        },
        bar: function() {
           this.sampleName += "anotherSample";
        }
    };

    var sample = new Sample("wow");

})();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-12
    • 1970-01-01
    • 2016-11-10
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多