对象未作为参考传递

时间:2010-11-13 08:58:21

标签: javascript object reference

我有一个ObjectManager,它包含对所有创建对象的引用。问题是ObjectManager没有引用创建的对象,而是似乎正在创建它的新实例。任何帮助,将不胜感激。谢谢!

var Fieldset = function (options) {
    var fieldset = ($.extend(true, {
        id: '',//Let's assume this has been overridden with 'MyFieldset' via the options param.
        title: '',
        accordion: '',
        fields: [],
        hidden: false,
        Show: function () { $('#' + this.id).show() },
        Hide: function () { $('#' + this.id).hide() }
    }, options));

    if (fieldset.id != null && fieldset.id != '')
        ObjectManager.fieldsets[fieldset.id] = fieldset;//Save a reference to this object in the ObjectManager, so I can call ObjectManager.GetFieldset('MyFieldset'). A reference is only saved if an id is provided.

    log(ObjectManager.GetFieldset(fieldset.id) == fieldset);//true
    return fieldset;
}

编辑:

抱歉,我觉得很清楚我想要这样做。 ObjectManger没有什么特别之处。它只为我的每个对象都有一个属性和Get方法。为简单起见,我只包含了fieldsets属性和Getter。我希望这能清除我的意图。

var ObjectManager =
{
    fieldsets: {},
    GetFieldset: function (id) { return this.fieldsets[id]; }
};

EDIT2:

经过一些测试后,我发现了一些奇怪的东西......希望有人可以向我解释为什么会这样。

var myFieldset = new Fieldset({ id: 'MyFieldset' });
log(myFieldset == ObjectManager.GetFieldset('MyFieldset'));//I just found that it is true in this case...
//... However, this is not the normal way I create Fieldsets... This is:
var editForm = new Form({
    dataStore: function () { return ClientsDS; },
    id: 'ClientEditForm',
    fieldSets: [
        new Fieldset({
            id: 'ClientDetailsFieldSet',
            title: 'Details',
            fields: [
            new Field({ id: 'ClientID', name: 'ID', property: 'ID', fieldType: 'hidden', value: '0' })
            ]
        })
    ]
});
log(editForm.fieldSets[0] == ObjectManager.GetFieldset('ClientDetailsFieldSet'));//false

3 个答案:

答案 0 :(得分:1)

在EDIT2上:

你的对象不平等,因为它们不一样。等于运算符并没有说这两个对象具有相同的键/值对,当它们是同一个对象时它们是相等的。

例如,

var a = b = {a: 1, b:2}; 
//This is b = {a: 1, b: 2}; a = b;  In case you were wondering
a === b //true

var a = {a: 1, b: 2},
    b = {a: 1, b: 2};
a === b //false

答案 1 :(得分:0)

嗯,你的Fieldset构造函数正在返回一个对象。也许尝试将其称为Fieldset({...})而不是new Fieldset({...})

答案 2 :(得分:0)

我假设你的Form类看起来像你的Fieldset类,即它$.extends(做一个深层复制)你用它的内部“原型”给它的选项。返回的对象是扩展原型,而不是原型对象扩展的options。尝试更改$ .extend参数的顺序(将选项放在第二位,将内部“原型”放在第三位),看看是否有任何改变。或者,发布您的Form类: - )