Создание объекта с конструктором и именованными членами - PullRequest
0 голосов
/ 20 января 2010

Как бы вы реализовали конструктор вместе с именованными функциями для объекта в JavaScript?

Вот как я хотел бы использовать объект:

o("..."); // use the object's constructor

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

Я не хочу «обновлять» объект до того, как он будет использован ... Вы могли бы сказать, что я хочу эквивалент статического класса с кучей статических методов и конструктором.

Ответы [ 4 ]

0 голосов
/ 21 января 2010

Вот как я бы это сделал, просто чтобы иметь возможность поделиться некоторыми свойствами внутри моих методов с помощью замыканий:

<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>

Что-то, чего у вас нет, объявляя их внешне.

0 голосов
/ 20 января 2010

Я думаю, что вы хотите иметь статических членов ( в языках OO на основе классов ) в ваших функциях конструктора .

В JavaScript функции являются первоклассными объектами, это означает, что они могут иметь свойства и обрабатываться так же, как любой объект:

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.

0 голосов
/ 20 января 2010

Это сделал трюк:

var o = function ()
{
    return "constructor";
};

o.namedFn = function ()
{
    return "namedFn";
};

console.log(o("test"));
console.log(o.namedFn("test"));
console.log(o("test"));
0 голосов
/ 20 января 2010

Этот ТАК вопрос имеет несколько хороших предложений и примеров. Кроме того, обязательно используйте new при создании экземпляра / объекта.

var obj = new MyClass();
obj.someMethod();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...