我一直在开阔我的视野,学习javascript,我有一个关于风格的快速问题。在编写这样的代码时,我经常使用文字符号。
var foo = {
bar:function(){/*something*/}
};但我在访问对象中的某些变量时会遇到问题,它会断言有一些变量无论如何都不存在。所以我开始用这个,因为它起作用了。
var foo = {};
foo.bar = function(){/*something*/};但在阅读了一些之后,我得到的印象是这种风格并不是首选的。并不是说我喜欢这种风格,它只是让事情变得正常。在使用文字表示法时,有没有什么最佳实践,这样我所有的变量都可以工作?
我希望我的旧代码仍然不能工作,但我认为它是一个指向另一个变量的变量,具有相同的对象文字或类似的东西。
发布于 2011-07-25 15:23:20
对象字面量应该是一个静态定义,当你在字面量声明中进行计算或逻辑时,它就会中断。如果您需要逻辑/计算,请改用对象构造函数。
例如
var o = {
b: 4,
c: 8,
d: o.b + o.c
}将导致TypeError,因为未定义o。这样做的原因是,首先创建对象文字,然后将其分配给变量o。
因此,当您创建对象文字时,对象o并不存在。
以下内容:
var o = {
b: 4,
c: 8,
d: this.b + this.c
}将会起作用,但不是你所期望的那样。不能在声明中直接引用object文本。因为在本例中,this绑定到window,而不是o。
如果您想要执行逻辑,请使用构造函数进行
var o = new function() {
this.b = 4;
this.c = 8;
this.d = this.b + this.c;
}或
var O = function() {
this.b = 4;
this.c = 8;
this.d = this.b + this.c;
}
var o = new O();结论:
只要object文字声明不包含逻辑,它就是安全的。(只需使用静态值声明函数和属性)。
如果声明包含逻辑,它应该在函数体中(如构造函数)
发布于 2011-07-25 15:25:58
您可以通过this访问当前对象的成员
var foo = {
bar: 10,
baz: function() {
console.log(this.bar);
}
}https://stackoverflow.com/questions/6812849
复制相似问题