我确定我在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"?
是否可以为我正在寻找的此类功能命名?
感谢。
答案 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”功能中:
执行上述Mic所描述的操作:使用空对象构造函数“{}”初始化变量“Location”。
尝试动态添加成员,如下所示:
位置['Ad1'] ='你好';
位置['Ad2'] ='世界';
答案 6 :(得分:0)
您也可以像构造函数一样
constructor{
Object.assign(this)
}
or You can eventually pass values
constructor(val){
Object.assign(this, val)
}