如何获得实例的父类

How can I get the parent of an instance

本文关键字:父类 实例 何获得      更新时间:2023-09-26

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

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

例如:

第一个对象(父对象)

    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,但返回函数而不是实例

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

谢谢

为什么不这样呢:

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

?

我怀疑你想写:

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

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

然而,继续按照你现在的方式去做可能是一个更好的主意。您当前的方法更加明确,并且没有将程序的函数调用结构直接绑定到动物对象的属性,这可能是一个更好的模型。

这个怎么样:

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;
        }
}

呢?

从概念上讲,AnimalList是一个聚合器,而不是Animal对象的父对象。您的代码似乎很好,但我建议您将变量名称从"parent"更改为"aggregator"。

我建议不要在父列表中使用带有引用的构造函数: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);