好的Javascript代码

Isa*_*iah 5 javascript coding-style object

我一直在扩大我的视野,学习javascript,我有一个关于风格的快速问题.在制作像我这样的代码时,我习惯使用文字符号.

var foo = {
  bar:function(){/*something*/}

};
Run Code Online (Sandbox Code Playgroud)

但是我会在访问对象中的某些变量时遇到问题,它会声称一些不存在的问题.所以我开始使用它,因为它有效.

var foo = {};
foo.bar = function(){/*something*/};
Run Code Online (Sandbox Code Playgroud)

但在阅读了一下后,我得到的印象是这种风格不是首选.不是说我喜欢这种风格,它只是让事情发挥作用.使用文字符号时是否有任何最佳实践,所以我的所有变量等都可以使用?

希望我有旧的代码仍然没有工作,但我认为它是一个变量指向具有相同的对象文字或类似的另一个变量.

Ray*_*nos 6

对象文字应该是一个静态定义,当你在文字声明中进行计算或逻辑时它会破坏.如果需要逻辑/计算,请使用对象构造函数.

例如

var o = {
  b: 4,
  c: 8, 
  d: o.b + o.c
}
Run Code Online (Sandbox Code Playgroud)

会导致TypeError因为o未定义.原因是首先创建对象文字,然后将其分配给变量o.

因此,在创建对象文字时,该对象o不存在.

下列 :

var o = {
  b: 4,
  c: 8, 
  d: this.b + this.c
}
Run Code Online (Sandbox Code Playgroud)

会工作,但不会像你期望的那样.您不能直接在声明中引用对象文字.因为在这个例子中this必然window而不是o.

如果你想做逻辑使用构造函数

var o = new function() {
  this.b = 4;
  this.c = 8;
  this.d = this.b + this.c;
}
Run Code Online (Sandbox Code Playgroud)

要么

var O = function() {
  this.b = 4;
  this.c = 8;
  this.d = this.b + this.c;
}
var o = new O();
Run Code Online (Sandbox Code Playgroud)

结论:

只要对象文字声明不包含逻辑,它就是安全的.(只需使用静态值声明函数和属性).

如果声明包含逻辑,它应该在函数体中(如构造函数)