2012-03-22 101 views
0
var boxArea = function() { 
    this.width=2; 
}; 

alert(boxArea.width); 

美好的一天。为什么这会返回一个未定义的值?使用函数创建Javascript对象

+2

阅读了关于JavaScript的[模块模式](http://www.adequatelygood.com/2010/3/JavaScript的模块的模式的纵深)。它解释了你的width变量是如何对boxArea对象进行私有的。 – Straseus 2012-03-22 23:33:50

+0

将使用“=新功能” – qux 2012-03-22 23:36:01

回答

3

因为您使用该语法创建了一个函数。你必须在函数()前添加“new”关键字,使它与一个类的等价。

的jsfiddle演示:http://jsfiddle.net/dfUQu/

var boxArea = new function() { 
    this.width=2; 
}; 

alert(boxArea.width);​ 
+0

好,所以新的关键字使一个新的对象。但功能是不是也是对象? – DevX 2012-03-22 23:55:26

+1

它们在语法上相似,但为不同目的而设计。一个函数只是为了执行一些工作而被调用。一旦它退出内部定义的任何东西,现在已经超出范围并被丢弃。一个类意味着*实例化*和*重用*。 * new *关键字创建了任何用户定义的实例*(或者构建对象,例如Date())。 – Timeout 2012-03-23 00:06:44

+0

我可以说var person = {};与var person = new object()相同; – DevX 2012-03-23 00:15:30

0

经典的方式来创建一个JavaScript构造使用声明的函数:

function BoxArea(width) { 
    this.width = width; 
} 

按照惯例,构造具有开头大写字母的名字。然后创建一个实例:

var ba = new BoxArea(2); 

alert(ba.width); // 2 

对于这样一个简单的对象,你可以只是做:

var ba = {width: 2};