gpt4 book ai didi

javascript - 如何在 JavaScript 中访问父对象的其他属性而不直接访问父引用?

转载 作者:行者123 更新时间:2023-11-28 20:06:43 24 4
gpt4 key购买 nike

自从我在项目中遇到这个问题以来,这个问题已经困扰我很长时间了。

在 JavaScript 中,通过 . 表示法可以轻松访问嵌套对象。有没有办法访问嵌套对象中的父对象?

看下面的代码:

function Parent() {
this.foo = new Foo;
this.bar = new Bar;
}

function Foo () {
this.sayHi = function () {
console.log('Hello World');
}
}

function Bar() {
this.callFoosMethod = function () {
// should call object foo's sayHi method and log 'Hello World'
}
}

var parent = new Parent;
parent.bar.callFoosMethod(); // => should log 'Hello World'

parent有两个子对象foobar,并且在bar对象的callFoosMethod中,我需要访问父对象的 foo 对象的 sayHi 方法,但嵌套在 parent 中的 foo 对其父对象一无所知。

有没有办法访问嵌套对象中的父对象或者JavaScript中实际上没有解决这个问题的方法?

最佳答案

不,没有。

存在组合关系。如果您想访问“父级”,则必须显式传递引用。这就是练习。

现在谈谈“为什么”:

“子对象”可以是多个对象的子对象:

var parent = new Parent;
var o = parent.bar;
o.bar.callFoosMethod(); // but o doesn't have a foo

这也会带来架构问题。循环结构是generally bad对象通信的方式必须尽可能简单。

如果他们需要通过父级进行对话,Bar 甚至不知道有一个 Foo那里。

解决方法

<小时/>

尽管这是不好的做法(高耦合、错误的责任位置等),但如果您必须,您可以这样做:

function Parent() {
this.foo = new Foo(this);
this.bar = new Bar(this);
}

function Foo (parent) {
this.sayHi = function () {
console.log('Hello World');
}
}

function Bar(parent) {
this.callFoosMethod = function () {
parent.foo.sayHi(); // BAD DESIGN WARNING!
}
}

再说一次,这是一个非常糟糕的设计。它完全违反了单一责任原则、关注点分离和清晰沟通。它通常表明存在设计问题。除非您完全确定这是您所需要的,否则请避免使用它。

关于javascript - 如何在 JavaScript 中访问父对象的其他属性而不直接访问父引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20680722/

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