如何解决当对象是其他对象的属性时,Javascript对象继承是什么?
我认为当从另一个对象创建一个对象时,我已经开始理解继承的概念,但是当一个对象是另一个对象的属性时,我就不理解继承。我的所有代码都使用多维数组和对象的组合进行工作,但不是采用真正的OOP格式。现在,在尝试将其全部转换为OOP格式时,我遇到了一些问题。
在下面的代码示例中:
我认为我真正要去的是一种设置,其中对象中的对象是从“父”对象继承的,即使它们不是从父对象创建的。那有可能吗?如果可以,那叫什么呢?我可以通过使用数组或对象作为关联数组来实现相同的目的,例如view [0] .index,但是看起来真正的OOP格式不需要它。
我意识到我可以将tab
传递给display.index
构造函数,使其成为tab
的属性,并将tab
方法设置为已定义的tab
方法,或可以从display
创建tab
;但是重点是要尝试减少display
上的方法数量,并按它们所应用的“子”对象进行分组。
完成此操作的正确方法是什么?
谢谢。
display
我试图让每个function tab( id )
{
this.id = id;
}
function display( i )
{
this.index = i;
this.tab = new tab(1);
}
tab.prototype.method_1 = function()
{
// Can the display.index that contain tab be referenced here?
// That is,apart from using view[0].index.
};
var view = [ new display( 0 ) ];
实例继承tab
的属性和方法,然后将display
属性和方法作为自己的属性。以下代码的工作方式是tab
继承了view.tab
的属性和方法,并将display
构造函数的属性作为自己的属性,但没有获得构造函数的tab
。我可以在此之后添加方法,但是有很多方法,并且必须为method_1
的每个实例完成。我还没有找到像Object.assign那样对构造器添加属性的完整结果。
OOP格式很有趣,但是,在这一点上,我无法确定它是否比使用多维索引更有效。我没有通过对display [i] .tab [j]或仅对display [i] [j]的变量进行操作来对显示中的所有选项卡执行相同功能的功能,而是为每个选项卡分别使用单独的方法实例,因为没有逻辑语句测试基于索引j的制表符之间的差异,因此更为直接,但是在需要搜索所有原型时,它真的更快吗?
将标签页从tab
继承是否比在每个display
实例中存储对this
的{{1}}的引用更好?我不知道该如何通过存储对display
的{{1}}的引用来请求属性,比拥有较高的原型并搜索较低的{{1}的原型更快或更慢。 },直到找到继承的属性。
一个优点似乎是,如果我可以正确设置它,以使选项卡继承显示示例中的方法,则可以将它们作为tab
调用,因为所有变量都是view_tab的一部分this
,并且不再需要标签索引。
display
解决方法
可以在此处引用包含选项卡的display.index吗?
否-举例说明,假设该实例是否也是另一个对象的属性:
const obj = {};
function display(i) {
this.index = i;
this.tab = new tab(1);
obj.tab = this.tab;
}
这有点做作,但仍然显示出问题-tab
实例如何知道它的method_1
是从display
还是从obj
调用的?不能。
如果您需要执行以下操作,则应以某种方式将有关父项的信息传递给选项卡实例:
function tab(id,parentDisplay) {
this.id = id;
this.parentDisplay = parentDisplay;
}
function display(i) {
this.index = i;
this.tab = new tab(i,this);
}
tab.prototype.method_1 = function() {
console.log(this.parentDisplay.index);
};
var view = new display(0);
view.tab.method_1();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。