即时创建Javascript对象

时间:2010-01-06 20:49:32

标签: javascript

我确定我在jquery中看到了一些这样的例子。但对我来说,以下代码不起作用。 firebug调试器告诉我:'位置未定义'。你能告诉我这是否可行?

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"?

是否可以为我正在寻找的此类功能命名?

感谢。

7 个答案:

答案 0 :(得分:15)

这就是发生的事情:

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 = {};
    alert(typeof Location); // now it's an object

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

    return Location;
}

如果您提前了解属性及其相应值,则可以使用更多内联方法:

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

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

    return Location;
}

Read here了解有关对象文字的更多信息。

答案 1 :(得分:4)

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

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

答案 2 :(得分:4)

在您的代码中尝试更改:

var Location;

in

var Location = {};

答案 3 :(得分:2)

var ResolveGeoCode = {
    Ad1 : "Hello",
    Ad2 : "World"
}

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

答案 4 :(得分:0)

这里缺少的是{}是ECMAScript中动态对象的标记。因此,当您看到像ChaosPandion这样的代码时,实际上就会发生这种情况。

在你的例子中,你几乎可以将单词函数更改为class,而你几乎就是完整的类。

答案 5 :(得分:0)

在“ResolveGeoCode”功能中:

  1. 执行上述Mic所描述的操作:使用空对象构造函数“{}”初始化变量“Location”。

  2. 尝试动态添加成员,如下所示:

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

答案 6 :(得分:0)

您也可以像构造函数一样

constructor{ 
Object.assign(this)
}
or You can eventually pass values 
 constructor(val){ 
 Object.assign(this, val)
 }
相关问题