代码之家  ›  专栏  ›  技术社区  ›  cllpse

使用构造函数和命名成员创建对象

  •  0
  • cllpse  · 技术社区  · 14 年前

    如何在JavaScript中的对象上实现构造函数和命名函数?

    这是我想要使用对象的方式:

    o("..."); // use the object's constructor
    
    o.namedFunction("..."); // use a named member on the object
    

    我不想再“新”东西了 在它可用之前…你可以说我想要一个静态类的等价物,它有一组静态方法和一个构造函数。

    4 回复  |  直到 14 年前
        1
  •  0
  •   Community Ian Goodfellow    7 年前

    这个 SO question 有几个好的建议和例子。另外,一定要使用 新的 创建实例/对象时。

    var obj = new MyClass();
    obj.someMethod();
    
        2
  •  0
  •   Christian C. Salvadó    14 年前

    我想你想要 静态成员 ( 基于类的OO语言 对你 constructor functions .

    在javascript中,函数是 first-class 对象,这意味着它们可以具有属性,并且可以像处理任何对象一样进行处理:

    functon Ctor (arg) {
      //...
    }
    Ctor.namedFunction = function () {
      // "static" member
    };
    
    
    var instance = new Ctor("..."); // use the object's constructor
    Ctor.namedFunction("..."); // use a named member on the object
    

    注意我添加了 namedFunction 属性直接指向 Ctor 函数对象。

        3
  •  0
  •   cllpse    14 年前

    这就成功了:

    var o = function ()
    {
        return "constructor";
    };
    
    o.namedFn = function ()
    {
        return "namedFn";
    };
    
    console.log(o("test"));
    console.log(o.namedFn("test"));
    console.log(o("test"));
    
        4
  •  0
  •   Mic    14 年前

    下面是我将如何做的,只是为了能够通过使用闭包在方法内部共享一些属性:

    <html>
    <head>
        <title>so</title>
    </head>
    <body>
        <script>
            function fn(arg){
                var init = arg;
                return {
                    meth:function(arg){
                        alert(init + arg);
                    }
                };
            };
            var obj = fn('Stack');
            obj.meth('Overflow');
        </script>
    </body>
    </html>
    

    一些你没有的东西,通过对外声明。