2010-01-06 136 views
3

我确定我在jquery中看到过这样的一些示例。但对我而言,下面的代码不起作用。萤火虫调试器告诉我:'位置未定义'。你能告诉我这是否可能吗?动态创建Javascript对象

function ResolveGeoCode() { 
    var Location; 
    Location.Ad1 = "Hello "; 
    Location.Ad2 = "World"; 

    return Location; 
} 

var loc = ResolveGeoCode(); 
var String1 = loc.Ad1; //This contains "Hello "? 
var String2 = loc.Ad2; //This contains "World"? 

是否可以给这种类型的功能赋予名称?

谢谢。

回答

12

这是发生了什么:

function ResolveGeoCode() { 
    // Location is declared, but its value is `undefined`, not `object` 
    var Location; 
    alert(typeof Location); // <- proof pudding 

    // Failing here because you're trying to add a 
    // property to an `undefined` value 

    Location.Ad1 = "Hello "; 
    Location.Ad2 = "World"; 

    return Location; 
} 

修复它通过声明Location为空对象尝试之前字面为其添加属性:

在对象文本

function ResolveGeoCode() { 
    var Location = { 
     Ad1: "Hello ", 
     Ad2: "World" 
    }; 

    // ...further manipulations of Location here... 

    return Location; 
} 

Read here更多:

function ResolveGeoCode() { 
    var Location = {}; 
    alert(typeof Location); // now it's an object 

    // Programmatically add properties 
    Location.Ad1 = "Hello "; 
    Location.Ad2 = "World"; 

    return Location; 
} 

如果你事先知道的属性和相应的值,你可以使用更直列方法。

+0

+1的详细解释 – 2010-01-06 21:11:27

3

这是内联对象创建的语法(在这种情况下,从函数返回)。

function ResolveGeoCode() { 
    return { 
     Ad1: "Hello ", 
     Ad2: "World" 
    }; 
} 
2
var ResolveGeoCode = { 
    Ad1 : "Hello", 
    Ad2 : "World" 
} 

var String1 = ResolveGeoCode.Ad1; //This contains "Hello "? 
var String2 = ResolveGeoCode.Ad2; //This contains "World"? 
0

什么你错过了这里是{}是在ECMAScript中动态对象的标记。所以当你看到像ChaosPandion这样的代码就是实际发生的事情。

在你的例子中,你几乎可以改变这个词的功能类,你几乎到了一个完整的类。

4

在代码中尝试改变:

var Location; 

var Location = {}; 
0

在“ResolveGeoCode”功能:

  1. 做什么上述麦克风:通过使用空对象构造初始化变量“位置”,“{}”。

  2. 尝试添加成员动态像这样:

位置[ '的Ad1'] = '你好';
位置['Ad2'] ='世界';

+0

虽然它的工作,国际海事组织的括号/数组存取符号是sl here在这里。当不需要构建属性标识符时,点/成员访问符表示法更可取。 – 2010-01-06 21:11:55