2014-10-30 2 views
0

Я пытаюсь создать класс в Javascript (или независимо от его эквивалента), который хранит счет в переменной класса, поэтому конструктор может назначить идентификатор созданным объектам. Что-то вроде следующего:Использование переменных класса в Javascript

Shift = function(hour) { 
    this.id = Shift.idCount; 
    Shift.idCount++; 
} 

Однако я не знаю, где idCount должен быть инициализирован или даже определен. Есть ли способ сделать это?

+0

ваш пример не очень ясен –

+0

Вы также можете проверить http://www.typescriptlang.org/ – blfuentes

ответ

1

Да, просто сказать

Shift.idCount = 0; 

после определения функции Shift.

Это позволяет вам получать доступ к текущему значению счетчика, когда захотите (если хотите). Если вам не нужно, хотите получить прямой доступ к значению счетчика, а также не хотите, чтобы кто-либо другой, а затем используйте закрытую переменную внутри Shift, которую предлагает @Pointy.

1

Я хотел бы сделать это с крышкой:

var Shift = function() { 
    var idCount = 1; // initial id 
    return function Shift(hour) { // this is the actual constructor 
    this.id = idCount++; 
    // other initialization ... 
    }; 
}(); 

var aShift = new Shift(9); 
alert(aShift.id); // 1 

var anotherShift = new Shift(17); 
alert(anotherShift.id); // 2 

Это использует анонимную функцию обертки, чтобы обеспечить замыкание, в котором счетчик может быть сохранен. Анонимная функция возвращает фактический конструктор, который будет вызываться позже. Каждый вызов конструктора копирует текущее значение счетчика в свойство «id» нового объекта и увеличивает его.

Имейте в виду, что вы узнаете о наследовании JavaScript, что на самом деле нет прямого эквивалента концепции «класса» на таких языках, как C# или Java. Попытки заставить JavaScript действовать, как эти языки, почти всегда заканчиваются разочарованием и горя.

Смежные вопросы