gpt4 book ai didi

Javascript从父类中定义的继承类方法访问类变量

转载 作者:行者123 更新时间:2023-11-28 15:54:44 25 4
gpt4 key购买 nike

嗯,我是原型(prototype)编程/设计的新手。我很乐意提供帮助。

问题是为什么我的“find”方法中的“this.__proto__instances”返回“undefined”?

如果我的方法是错误的,请原谅我,我会很高兴知道调用类方法来查找类变量数组中的元素的正确方法,而无需为每个子元素定义该方法。

问题的细节在下面的代码中以注释的形式阐述。

谢谢。

function Attribute(name,type){
//some members definition, including uid, name, and type
};

Attribute.prototype.find=function(uid){
var found_attr=false;
this.__proto__.instances.forEach(function(attr){
if (attr.uid == uid) found_attr=attr;
});
return found_attr;
};

this.__proto__.instances.forEach(function(attr){ 上面是错误的一行。日志显示“无法调用未定义的 forEach 方法”

function ReferenceAttribute(arg_hash){
Attribute.call(this,arg_hash.name,arg_hash.type);
//some members definition
this.pushInstance(this);
};

this.pushInstance(this); 将此实例推送到工作正常的 ReferenceAttribute.prototype.instances

ReferenceAttribute.prototype=new Attribute(); 

ReferenceAttribute 通过原型(prototype)链方法继承 Attribute

ReferenceAttribute.prototype.instances=new Array(); 

上面的行声明了包含引用属性的所有实例的数组。对于 ReferenceAttribute 的每个新对象,它将被推送到此数组中,通过方法 pushInstance() 完成。推送总是成功的,我通过控制台日志记录检查了它们。该数组确实包含 ReferenceAtribute 实例

function ActiveAttribute(arg_hash){
Attribute.call(this,arg_hash.name,arg_hash.type);
//some members definition
this.pushInstance(this);
};

ActiveAttribute.prototype=new Attribute();
ActiveAttribute.prototype.instances=new Array();

在程序中使用

var ref_attr=ReferenceAttribute.prototype.find("a uid"); 

给出错误,指出它无法调用未定义的 forEach 方法。它可以调用方法find,因此它可以很好地继承。但我猜 find 方法定义中的“this._proto_instances”是错误的。

编辑:

Attribute.prototype.pushInstance=function(my_attribute){    
this.__proto__.instances.push(my_attribute);
};

这个功能有效。虽然实例数组由 ActiveAttribute 或 ReferenceAttribute 拥有,而不是 Attribute 本身,但此函数确实可以将其推送到数组。

最佳答案

这是因为你正在这样做:

var ref_attr=ReferenceAttribute.prototype.find("a uid"); 

ReferenceAttribute.prototype 对象是从 Attribute 构造函数创建的实例,并且 Attribute.prototype 没有 .instances 属性,也没有直接在对象上定义的 .instances 属性。

关于Javascript从父类中定义的继承类方法访问类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19309474/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com