Единственный экземпляр класса в JavaScript - PullRequest
2 голосов
/ 05 января 2011

Javascript позволяет определять функцию как

function Name() { content; }

и

var Name = function() { content; }

Есть ли эквивалент для классов? Я ищу, чтобы создать один экземпляр класса. Единственный способ, которым я знаю, как это сделать, это

function ClassName() { content};
var instance = new ClassName();

Разве я не могу объединить эти два в одно утверждение?

Спасибо!

Ответы [ 2 ]

9 голосов
/ 05 января 2011

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

var instance = {
    name: "foo",
    method: function() {
        // do something
    }
};

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

var instance = {};
instance.name = "foo";
instance.method = function() {
    // do something
};

Я обычно использую функцию при определении синглтона или "класса" (на самом деле, функция конструктора), но это потому, что у меня есть кое-что о именованных функциях (функция, указанная выше для свойства method, это anonymous , что означает, что мои инструменты могутмне не очень помогает - со стеками вызовов и т. д.).Поэтому я бы, вероятно, сделал это:

var instance = (function() {
    var publicSymbols = {};

    publicSymbols.name = "foo";

    publicSymbols.method = instance_method;
    function instance_method() {
        // do something
    }

    return publicSymbols;
})();

... хотя я обычно использую более короткое имя для publicSymbols (хотел быть достаточно ясным, что он сделал).Во-первых, это позволяет мне иметь действительно закрытые функции, которые могут использовать синглтон или «класс», которые никто не может видеть. Больше здесь. Но это выбор стиля;это может быть так же просто, как первые два примера выше.

0 голосов
/ 05 января 2011

вы можете использовать это. это самоисполняющаяся функция, которая вместо этого назначит результаты функции.

var instance = (function className() { return something; } )();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...