admin管理员组文章数量:1405871
How can I declare a private var inside a literal object? Becasuse I've this code:
var foo = {
self: null,
init: function() {
self = this;
self.doStuff();
},
doStuff: function() {
//stuff here
}
}
This works perfectly, but if I have some objects, the var "self" it will override.. apparently it's a global var.. and I cannot use the restricted word "var" inside this object..
How can I solve this, or make an NameSpace for each object?
Thanks!
How can I declare a private var inside a literal object? Becasuse I've this code:
var foo = {
self: null,
init: function() {
self = this;
self.doStuff();
},
doStuff: function() {
//stuff here
}
}
This works perfectly, but if I have some objects, the var "self" it will override.. apparently it's a global var.. and I cannot use the restricted word "var" inside this object..
How can I solve this, or make an NameSpace for each object?
Thanks!
Share asked Dec 6, 2011 at 15:32 mauriblintmauriblint 1,7072 gold badges29 silver badges47 bronze badges 4-
2
Why
self = this; self.doStuff()
instead ofthis.doStuff()
? – user395760 Commented Dec 6, 2011 at 15:40 - -1 Post what you're actually trying to do in the question. – RightSaidFred Commented Dec 6, 2011 at 16:09
- possible duplicate of How to add private variable to this Javascript object literal snippet? – naXa stands with Ukraine Commented Jul 28, 2015 at 9:02
- @delnan You would need to do this if you were using the Google Closure Compiler where assigning stuff to "this" is dangerous. – Johann Commented Jul 12, 2017 at 6:54
3 Answers
Reset to default 6You can create a function scope to hide the variable:
var foo = (function() {
var self = null
return {
init: ...,
doStuff: ...
};
})();
Though it is not clear what self
is supposed to do here, and how foo
is used.
You have to use this
:
init: function() {
this.self = this;
this.self.doStuff();
},
edit However, it's still a property of the "foo" object, and it's not super-clear where you're getting instances of "foo" from. In other words, the way your code is written, there's only one object.
Alternatively, you could create your object with a closure:
var foo = function() {
var self = null;
return {
init: function() {
self = this;
self.doStuff();
},
doStuff: function() {
//stuff here
}
};
}();
You are not even using the property that you have created. Instead you create another global variable with the same name. Use the this
keyword to access properties:
var foo = {
self: null,
init: function() {
this.self = this;
this.self.doStuff();
},
doStuff: function() {
//stuff here
}
}
(Although saving this
in a property is truly pointless...)
If you want a local variable in the object, create a closure for it:
var foo = (function(){
var self = null;
return {
init: function() {
self = this;
self.doStuff();
},
doStuff: function() {
//stuff here
}
};
}());
本文标签: Private var inside Javascript literal objectStack Overflow
版权声明:本文标题:Private var inside Javascript literal object - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1744951317a2634101.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论