2013-10-15 5 views
0

Этот конструктор:метод на классе - статический член

function Foo() { 
    this.id = 0; 
} 

Я метод создания на «класс» здесь:

Foo.id = function() { 
    return id form Product + 1; // pseudocode 
} 

Foo.id() // 1 
Foo.id() // 2 

Ну, я хочу, чтобы вызвать метод (идентификатор) в конструкторе без создания экземпляра Foo, где метод id() получает доступ к идентификатору открытого участника и устанавливает его в id + 1. Также, когда я создаю экземпляр, метод идентификатора вызова при его создании и устанавливает идентификатор. Во-первых, это закрытие для меня. Любая помощь будет оценена и ссылки для дальнейшего чтения.

Я собираюсь создавать экземпляры Foo позже, вот шаблон:

var myFoo = new Foo({ 
    title: "titlevalue", // string 
    price: n // ni is integer 
}); 

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

+1

[соответствующий] (http://stackoverflow.com/questions/7694501/class- статический метод-в-JavaScript/7694583 # 7694583). – zzzzBov

+1

Что вы подразумеваете под "* public member' id' * "? 'This.id' является свойством экземпляров, поэтому вы не можете установить это без создания экземпляра (если вы не хотите его установить на прототипе, где он будет применяться ко всем экземплярам, ​​включая еще не созданные) – Bergi

+0

@Bergi Я допустил ошибку. Да, this.id является свойством экземпляра, но я также хочу установить какое-то значение по умолчанию, а затем увеличивать его после создания экземпляра или метода вызова класса. –

ответ

2

Функция - это объект. Поместите второе свойство в свою функцию.

Foo.currentId = 0; 

Foo.id = function() { 
    return ++Foo.currentId; 
}; 

Если вы настаиваете на том, это «частный», вы можете создать функцию внутри функции:

Foo.id = (function() { 
    var id = 0; 

    return function() { 
     return ++id; 
    }; 
})(); 
+0

Что такое 'Foo' здесь? Похож на объект. – Madbreaks

+0

@Madbreaks: Это так. – Ryan

+0

Но op говорит: «Я хочу вызвать метод id() на конструкторе без создания экземпляра Foo». Я пытаюсь склонить голову вокруг вопроса, не сомневаясь в вашем ответе. – Madbreaks

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