使用函数向JS Object Literal添加属性

时间:2013-07-15 17:50:01

标签: javascript json javascript-objects object-literal

我正在尝试使用函数向我的JS对象添加“属性”:“value”,但遇到了麻烦。我希望你们中的一些人能够提供帮助。

请允许我创建一个上下文...

这是我的对象,它自己驻留在我的文件“myobject.js”中:

var myObject = {
'12-25-2012' = '<p>Christmas</p>', 
'07-18-2013' = '<p>My Birthday</p>' 
};

现在我有更多要添加到对象的信息。我知道我可以通过在脚本标签中插入以下内容或在对象下面的myobject.js文件中执行此操作:

var theDate = '07-23-2013'; 
myObject[theDate] = "<p>Mom's Birthday</p>";

但这不是我希望它发生的方式。为了这个上下文,我想添加一个完全相同的信息,使用一个名为myFunction()的函数。原因是,在应用程序中,我希望能够将参数传递给函数,该函数将定义对象的新属性和值。

这是我尝试的,但不起作用:

function myFunction(){
var theDate = '07-23-2013'; 
myObject[theDate] = "<p>Mom's Birthday</p>";
}

关于出了什么问题的任何想法?非常感谢帮助!!

2 个答案:

答案 0 :(得分:1)

您的JSON格式有错误。分隔符为:而不是=

下面是创建对象的示例。 第一次访问myObject['07-23-2013']时,undefined

第二次存在是因为myFunction()已被调用。

的jsfiddle:http://jsfiddle.net/KuFKU/

示例:

  var myObject = {
    '12-25-2012':'<p>Christmas</p>', 
    '07-18-2013':'<p>My Birthday</p>' 
};

alert("This exists:"+myObject['12-25-2012']);
alert("This is undefined:"+myObject['07-23-2013']);

myFunction();

alert("This is now defined:"+myObject['07-23-2013']);

function myFunction(){
var theDate = '07-23-2013'; 
myObject[theDate] = "<p>Mom's Birthday</p>";
}

答案 1 :(得分:1)

我不鼓励在[]类型变量上使用括号Object

此外,您必须使用attribute : value表示法在对象中定义属性/属性,因此不会使用等号

您可以使用{{3>}( MDN )方法轻松实现所需目标:

的JavaScript

var myObject = {
    '12-25-2012': '<p>Christmas</p>',
    '07-18-2013': '<p>My Birthday</p>'
};


function myFunction(attribute,value) {
    Object.defineProperty(myObject, attribute, {
        value: value,
        /* This lets you overwrite the value later */
        writable: true,
        /* This lets you see the attribute in the Object attributes/properties list and in the length too */
        enumerable: true,
    });
    return myObject;
}

/* Displaying the content of the Object */
console.dir(myFunction("07-23-2013","<p>Mom's Birthday</p>"));
alert(JSON.stringify(myObject,null,4));

所以你用这种方式调用函数:myFunction(TheDate, TheValue);

Object.defineProperty