2010-10-19 47 views
7

我是一个困惑的新手。声明javascript对象与var与函数之间有什么区别?

function myObject() { 
    this.myProperty = "a string"; 
    this.myMethod = function() { 
     //Method code 
    } 
} 

然后我读别的地方,你创建一个对象,像这样:

var myObject = { 
    myProperty: "a string", 
    myMethod : function() { 
     //Method code 
    } 
} 

是什么(非主观的)区别我在你创建一个JavaScript对象,像这样的教程阅读两者之间?有正确的方式和错误的方式吗?

回答

5

这两个声明都是正确的,但它们有不同的语义。

第一种类型的声明可以让你创建对象的实例:

var t = new myObject(); 
// then use t 
t.myProperty = "some value"; 

var otherT = new myObject(); 
otherT.myProperty = "some other value"; 

二是几乎像一个静态对象:

myObject.myProperty = "some value"; 
+1

我宁可打电话给第二个没有构造函数的* singleton *。 – galambalazs 2010-10-19 15:38:14

+0

感谢您将它与静态对象进行比较。这是解释它的好方法。 – randomable 2010-10-19 16:31:29

3

这是一个直接的比较.. 。

function myObject() { 

这声明函数时JavaScript解析...

var myObject = function() { 

这在运行时声明该函数。

如果您使用“var”方法,则必须在使用它之前声明您的函数......尝试此示例。

myFunction(); // Works 
myVarFunction(); // Boom 

var myVarFunction = function() { alert("Hi"); }; 

function myFunction() { alert("Hi"); }; 

那么为什么要使用“var”方法,如果你必须更小心地使用它?这与范围有关......范围内的功能被认为更好。

更新:而且这里有一些伟大的解释:

var functionName = function() {} vs function functionName() {}

+0

感谢您的链接!一个答案说var是有范围的,但是另一个答案纠正了它,说它们都是有范围的。我对它进行了测试,在我看来,var和function的作用范围都是一样的。或者有没有其他的条件? – randomable 2010-10-19 16:37:53

+0

@randomable - 是的,在这种情况下的范围似乎会造成混淆......我可能是另一个受害者。看看这个:https://developer.mozilla.org/en/JavaScript/Reference/Functions_and_function_scope – Fenton 2010-10-20 08:17:15

0

两者之间的主要区别是一个变量是本地的,另一个是全球性的。 “var”基本上定义了变量的范围。

当我们将var添加到变量值赋值中时,javascript确保变量被限制为分配给它的任何函数,并且不会与另一个函数中的同名变量相冲突。

当我们不使用var时,它被声明为全局函数并且可能发生碰撞。所以在变量赋值之前使用“var”总是可取的。如果需要,请使用匿名函数关闭。

相关问题