1

在我的项目中,我需要获取创建第二个对象的另一个实例的对象实例。

我通过在第二个对象的构造函数中发送实例绕过了这个问题,但我正在寻找更好的解决方案

例如:

第一个对象(父对象)

    function AnimalsList()
    {
            var _list = new Array();
            this.List = _list;

            this.Add = function(name)
            {
                    _list.push(new Animal(name),this);
            }
    }

第二个对象(孩子)

    function Animal(name, parent)
    {
            this.Name = name;

            this.GetList = function()
            {
                    return parent
            }
    }

我知道在这种情况下,“GetList”函数更合乎逻辑地包含在第一个对象中,但这只是一个示例。

我尝试使用this.constructor但返回函数而不是实例

我希望我已经很好地解释了这个问题,我的英语不好!

谢谢

4

5 回答 5

0

这个怎么样:

function AnimalsList()
{
        var _list = new Array();
        this.List = _list;

        function getList() { return _list; } 

        this.Add = function(name)
        {
           var obj = { Name:name, GetList:getList };
           _list.push(obj);
           return obj;
        }
}

然后?

于 2013-05-26T03:45:17.950 回答
0

我建议不要使用带有父列表引用的构造函数,如下所示Animal(name, parent):因为动物不应该知道 List。这是一个列表的交易,说动物“嘿,伙计!你在我的收藏中。 ”所以,我的小修改:

function Animals()
{
    var __list = new Array();

    this.List = __list;

    this.Create = function(name){
        return this.Add(new Animal(name));
    }

    this.Add = function(animal){
        animal.__parent= this;
        __list.push(animal);
        return animal;
    }

    Animals.Parent = function(animal){
        return animal.__parent;
    }
}

function Animal(name)
{
    this.Name = name;
}

例子:

var animalsLikeDogs = new Animals();
var dog = animalsLikeDogs.Create("dog");

var animalsLikeCats = new Animals();
var cat = animalsLikeCats.Create("cat");

Animals.Parent(dog);
Animals.Parent(cat);
于 2013-05-26T03:49:06.740 回答
0

为什么不只是这样:

function Animal(name, parent)
{
        this.Name = name;
        this.List = parent;
}

?

我怀疑你想写:

_list.push(new Animal(name,this));

而不是你那里有什么。

于 2013-05-26T03:30:01.110 回答
0

您可以通过函数的调用者属性获取此信息。它不是 ECMAScript 标准的一部分,但所有主流浏览器都支持它。

但是,按照您现在的方式继续这样做可能是一个更好的主意。您当前的方法更加明确,并且不会将程序的函数调用结构直接与动物对象的属性联系起来,这可能是一个更好的模型。

于 2013-05-26T03:40:00.210 回答
0

从概念上讲,AnimalList 是一个聚合器,而不是 Animal 对象的父级。您的代码看起来不错,但我建议您将变量名称从“父”更改为“聚合器”。

于 2013-05-26T03:53:01.940 回答