Private var внутри объекта JavaScript literal
Как я могу объявить частный var внутри литерального объекта? Потому что у меня есть такой код:
var foo = {
self: null,
init: function() {
self = this;
self.doStuff();
},
doStuff: function() {
//stuff here
}
}
Это работает отлично, но если у меня есть некоторые объекты, то var "self" это переопределит.. очевидно, это глобальный ВАР.. и я не могу использовать ограниченное слово " var " внутри этого объекта..
Как я могу решить эту проблему или создать пространство имен для каждого объекта?
Спасибо!
3 ответа:
Вы можете создать область действия функции, чтобы скрыть переменную:
var foo = (function() { var self = null return { init: ..., doStuff: ... }; })();
Хотя неясно, что
self
предполагается здесь делать, и какfoo
используется.
Вы должны использовать
this
:init: function() { this.self = this; this.self.doStuff(); },
edit Тем не менее, это все еще свойство объекта "foo", и не очень понятно, откуда вы получаете экземпляры "foo". Другими словами, в том, как написан ваш код, есть только один объект.
В качестве альтернативы можно создать объект с закрытием:
var foo = function() { var self = null; return { init: function() { self = this; self.doStuff(); }, doStuff: function() { //stuff here } }; }();
Вы даже не используете свойство, которое вы создали. Вместо этого вы создаете другую глобальную переменную с тем же именем. Используйте ключевое слово
this
для доступа к свойствам:var foo = { self: null, init: function() { this.self = this; this.self.doStuff(); }, doStuff: function() { //stuff here } }
(хотя сохранение
this
в свойстве действительно бессмысленно...)Если вам нужна локальная переменная в объекте, создайте для нее замыкание:
var foo = (function(){ var self = null; return { init: function() { self = this; self.doStuff(); }, doStuff: function() { //stuff here } }; }());