javascript - 子对象访问父对象的更好方法?

标签 javascript object parent

我有一些 JS,您将在下面看到。我希望内部类对象能够访问它的父对象。它需要访问父方法和属性。我完成它的方式是有效的,但我想知道我是否可以在内部类构造函数中做一些事情来获取父级,而不是让父级必须明确地告诉子级它的父级是谁。看起来很笨重。

<html>
<body>
<script>
function ChildClass(name){
    //this.myParent=  no way of knowing .....
    this.myName=name;
    this.whereDidIComeFrom=function(){
        document.write(this.myName+ " came from " +this.myParent.dad+"<br>");
    }
}

function ParentClass(name){
    this.dad=name;
    this.myChild=new ChildClass(name+"son");
    this.myChild.myParent=this;   //only way I know for myChild to access parent
    this.myChild.whereDidIComeFrom();
}

var parentDavid = new ParentClass("David");
var parentJohn = new ParentClass("John");
</script>
</body>
</html>

运行的输出如下所示:

Davidson came from David

Johnson came from John

我问是因为上面的结构已经存在于我正在维护的项目中。我不能去重新设计整个事情。只是现在子对象必须访问它的父对象。以前不需要。完全不必更改父类并在子类中进行所有更改会很好。但如果我得到的基本上是“你需要做的”,那就这样吧。

最佳答案

原则上,这已经是正确的做法。您可以使它更高级一些,在子项中提供一个 introduceParent() 函数来检查父项引用是否已设置,但这不会改变问题的核心。

虽然您的数据模型中的子项只能属于一个父项,但 Javascript 并不知道这一点。例如,可能有多个 parent 提到同一个 child (传闻有时自然会发生)。事实上, child 不是 parent 的“内部类(Class)”。 child 和 parent 只是关联,即“他们以某种方式认识对方”,这是一种未指定的关系,但两者都不是对方的一部分(或属性(property))。

关于javascript - 子对象访问父对象的更好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6285448/

相关文章:

c# - 围绕着 N 个父-> 子关联

javascript - 处理快速异步中间件中的错误

javascript - jQuery 插件 + AMD = 如何访问函数?

object - 如何将 Racket 对象的字段 ID 作为函数参数传递

javascript - 将 object.constructor 与其构造函数和 instanceof 进行比较有什么区别?

javascript - MomentJS - 一种获取过去 24 小时每小时价格的更简洁的方法

javascript - 从主窗口访问 iframe 内部属性

javascript - 按下浏览器的后退/前进按钮时显示自定义弹出窗口

选择 Selenium 中已知元素的父元素

javascript - 单击链接后获取同级的 ID