Javascript - OOP 引用循环

标签 javascript oop

我试图创建具有另一个对象“项目”的对象“房间”。 我希望每个“项目”都引用“房间”。

我只想知道某个“元素”的“房间”是什么……

问题来了:

// Creating Room Class
function Room(name){
  this.name = name;
  this.items = [];
};

// function that creates item in a Room
Room.prototype.addItem = function(name){
    var newItem = new Item(name, this);
    this.items.push(newItem);
}

// Creating Items Class
function Item( name, room ){
    this.name = name;
    this.parentRoom = room; // HERE IS THE PROBLEM!!
    // I need reference to my Room Class
};


// Lets create a Room
var myRoom = new Room('MyRoom');

// And lets add some items
myRoom.addItem("chair");
myRoom.addItem("bed");
myRoom.addItem("computer");

// Result -> you can see endless loop of Rooms in th Items
console.log( myRoom );

在Inspect元素中可以看到死循环。

Screenshot from Inspect element

或者创建这个东西的正确方法是什么? 我需要对“Item”类使用“extends”方法到“Room”吗?

最佳答案

当您检查 javascript 对象时,未结束的对象引用没有任何问题。它们实质上在对象引用中形成了一个循环图。

但是,这意味着您可以获得循环图的缺点。

当遍历/迭代图形时,您需要通过跟踪您已经访问过的对象并且不会多次访问它们来小心无限循环。 (即通过跟踪 visited map )

关于Javascript - OOP 引用循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33651615/

相关文章:

javascript - 将项目从异步函数追加到数组

javascript - PHP - 回显 Javascript 函数

javascript - 使用 Brightcove 播放器和外部 JS

javascript - jQuery 在两个以上类之间切换

model-view-controller - MVC 中的模型到底是什么

oop - 使用 oop 继承的 angularjs

javascript - C# 排序与 JavaScript 排序

PHP - 严格的标准 : Accessing static property as non static - Nothing is static?

java对象方法(菜鸟的东西)

c# - 领域驱动设计 : How to Retrieve Lists of Complex Data