如何获得实例的父类
How can I get the parent of an instance
在我的项目中,我需要获得创建第二个对象的另一个实例的对象的实例。
我通过在第二个对象的构造函数中发送实例来绕过这个问题,但我正在寻找一个更好的解决方案
例如:第一个对象(父对象)
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);
相关文章:
- 为什么无法在TypeScript中导出类实例
- 是否可以从父类访问子类的属性
- 使用此选项选择父类内部的类
- 子类访问父类's闭包变量
- 如何通过Prototype或jquery移除子类的父类基类
- google在类内映射javascript directionsService.route请求:将类实例传递给回调函数
- 当与另一个实例进行比较时,我的类实例如何隐式返回数字
- 将新类实例中的数据存储在数组中
- JavaScript—父类和子类/对象的此问题
- 通过使用此组件,检索父类数据
- jQuery .not() 排除特定类的父类
- 如何理解“当类实例化时,JavaScript静态方法也是不可调用的”
- 无法将值从实例对象传输到父类的实例数组中
- 从实例获取主干视图的父类
- RxJS 5子类Observable-静态方法返回父类的实例
- 用父属性实例化子类的Javascript
- 如何在JavaScript中进行继承,而不会在子类的所有实例之间共享父类的相同实例?
- JavaScript:从父类实例中创建子类
- 如何获得实例的父类
- 为什么我的javascript Backbone.js模型共享相同的"实例“;他们的父类