微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当对象是其他对象的属性时,Javascript对象继承是什么?

如何解决当对象是其他对象的属性时,Javascript对象继承是什么?

我认为当从另一个对象创建一个对象时,我已经开始理解继承的概念,但是当一个对象是另一个对象的属性时,我就不理解继承。我的所有代码都使用多维数组和对象的组合进行工作,但不是采用真正的OOP格式。现在,在尝试将其全部转换为OOP格式时,我遇到了一些问题。

在下面的代码示例中:

  1. 是否可以引用包含display.index的{​​{1}}中的tab的“父”的method_1

  2. 如果tab方法,是否可以从display方法调用它们?

我认为我真正要去的是一种设置,其中对象中的对象是从“父”对象继承的,即使它们不是从父对象创建的。那有可能吗?如果可以,那叫什么呢?我可以通过使用数组或对象作为关联数组来实现相同的目的,例如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 举报,一经查实,本站将立刻删除。