【问题标题】:Creating a new object within namespace javascript在命名空间javascript中创建一个新对象
【发布时间】:2012-12-03 16:10:37
【问题描述】:

我正在尝试在命名空间中创建一个函数,该函数将为我提供一个新的对象实例。

尝试执行以下操作时出现语法错误:

var namespace = {
    a : function(param){
        this.something = param;
    },
    a.prototype.hi = function(){
        alert('hi');
    },

    b : function(){
        var t = new a('something');
    }
};

这样做的正确语法是什么?在namespace 对象内不能做吗?我不想先声明命名空间。谢谢

【问题讨论】:

  • 重复。请参阅此 SO 答案以了解这样做的方法:stackoverflow.com/questions/7137860/…
  • 感谢 Eli - 我知道必须有一个简单的方法来做到这一点,这对我来说似乎很常见。不幸的是,我现在必须进行一些代码重构,但我认为这不会太糟糕。

标签: javascript object instance


【解决方案1】:

我不想先声明命名空间。

你可以做这样奇怪的事情:

var namespace = {
    init: function() { 
        a.prototype.whatever = function(){};
    },
    a: function(x) {
        this.x = x;
    }  
}
namespace.init();
var myA = new namespace.a("x");

但是,如果您想封装所有内容,为什么不尝试使用模块模式呢?更干净:

var namespace = (function() {
     function a() {};
     function b(name) {
          this.name = name;
     };
     b.prototype.hi = function() {
          console.log("my name is " + this.name);
     }
     return {
          a: a,
          b: b
     }
})();

【讨论】:

  • 谢谢,我想我会重构使用模块模式。
【解决方案2】:

javascript 命名空间是一个对象,因此您只能使用 key: value 对,但不能使用代码(就像您使用 a.prototype.hi = function() {...} 一样)。

因此,您应该将其分为两部分:声明和代码:

var namespace = {
    a : function(param){
        this.something = param;
    },
    b : function(){
        var t = new a('something');
    }
};

namespace.a.prototype.hi : function() { ... }

【讨论】:

  • 我不确定你的评论是什么意思“没有代码”——这显然不是真的。
  • 是的,可能是公式不好,这里是“关键”a.prototype.hi,这在 javascript 对象中是不可能的,但在值中你可以添加任何你想要的代码!
【解决方案3】:

我不完全知道你想要什么,但这很有效:

var namespace = {

    a: function() {

        function a() {

        }

        a.prototype.hi = function() {
            console.log("hi");
        }

        return new a;

    }

}

var obj = new namespace.a();
obj.hi()

// -> 'hi'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-28
    • 1970-01-01
    • 1970-01-01
    • 2014-04-25
    • 2013-11-14
    • 2012-10-14
    • 1970-01-01
    • 2012-03-14
    相关资源
    最近更新 更多