/**
* adds an entry to the list
*
* @param data {Object}
* @return this
*/
ElementList.prototype.addEntry = function(data){
if (!data) return this;
data['type'] = this.children_type;
// add the entry to the current elements
this.element_list.push(new FavoriteEntry(data));
this.refresh();
return this;
};
/**
* favorites extend ElementList
*
* @param setting_list
* @constructor
*/
function FavoriteList(setting_list){
ElementList.call(this, setting_list);
}
FavoriteList.prototype = new ElementList();
FavoriteList.constructor = FavoriteList;
所以这是我的教育项目的简短代码片段。 我想要做的是减少重复代码,所以我创建了一个通用的ElementList对象 所以
这完全正常我的问题是
// add the entry to the current elements
this.element_list.push(new FavoriteEntry(data));
这应该基于CHILD创建一个对象的新实例,因此我需要获取调用父方法的子实例的名称
我试过了 - this.constructor(指向父母) - this.constructor.name - 这个最喜欢的列表(工作)因为我不想传递一个名字,我认为迭代实例“选项”并不是很聪明。
我想问一下如何在父元素方法体中访问子实例名称。
我只需要一个明确的答案!!我已经阅读了解决方法!如果不可能这么说:)
提前thx:)答案 0 :(得分:1)
this.element_list.push(new FavoriteEntry(data));
这应该基于CHILD创建一个对象的新实例 因此,我需要获取正在调用的子实例的名称 父方法
不,你似乎不需要知道这个名字。您只需要一个辅助函数来生成新的Entry
实例,可以覆盖它们以生成更具体的条目。也许你已经通过children_type
传递data
来实现这一点。
我试过 - this.constructor(指向父母)
如果您正确设置了constructor
,它应该可以正常工作。将您的代码更改为
FavoriteList.prototype.constructor = FavoriteList;
// ^^^^^^^^^^
此外,您可能希望use Object.create
instead of new
设置原型链。
答案 1 :(得分:1)
我不确定我是否完全理解,但代码new FaforiteEntry
应根据当前对象类型创建FororiteEntry或其他类型。
以下示例可能会帮助您:
var ElementList = function(args) {
this.element_list = [];
}
ElementList.prototype.addEntry = function(args) {
this.element_list.push(new this.entryType(args.val));
};
//will create element_list items of type String
ElementList.prototype.entryType = String;
function FavoriteList(args) {
ElementList.call(this, args);
}
FavoriteList.prototype = Object.create(ElementList.prototype);
FavoriteList.constructor = FavoriteList;
//will create element_list items of type Array
FavoriteList.prototype.entryType = Array;
//adding entries to f would create items of type Array
var f = new FavoriteList();
f.addEntry({val: 2});
console.log(f.element_list);//[[undefined, undefined]]
//adding entries to e would create items of type String
var e = new ElementList();
e.addEntry({val: 2});
console.log(e.element_list);//[ String { 0="2"...
答案 2 :(得分:1)
简单的代码示例:
function Parent(){
// custom properties
}
Parent.prototype.getInstanceName = function(){
for (var instance in window){
if (window[instance] === this){
return instance;
}
}
};
var child = new Parent();
console.log(child.getInstanceName()); // outputs: "child"