gpt4 book ai didi

javascript - Javascript 中的容器类

转载 作者:行者123 更新时间:2023-12-03 09:01:03 25 4
gpt4 key购买 nike

完全的 OOP 初学者,所有这些都是用 Javascript 完成的,所以请原谅我的任何明显的愚蠢:

我想跟踪动态创建的对象。我相信我解决这个问题的方法是使用容器类。

  1. 容器类是我想要的吗?
  2. 如果是,我的实现是否正确?
<小时/>

Branch 对象是动态生成的。

Branch 对象包含一个 Branch 对象数组。

function Branches() {

function Branch() {
var _id;

_id = Math.round(Math.random()*10);

this.getId = function() {
return _id;
}

}

this.createBranch = function() {
var branch = new Branch;
_branches.push(branch);
}

this.getBranches = function() {
return _branches;
}

this.getBranchIds = function() {
var branch_list = this.getBranches();

var branch_ids = [];

for (var i = 0; i < branch_list.length; i++) {
var branch_id = branch_list[i].getId();
branch_ids.push(branch_id);
}

return branch_ids;
}

var _branches = [];

}

// code test
var test = new Branches;

for (var i = 0; i < 7; i++) {
test.createBranch();
}

console.log("Branch IDs:\n" + test.getBranchIds());

最佳答案

尽管存在一些简单的问题(例如,您没有为每个分支生成唯一的 ID),您的代码仍然可以工作(耶!)。如果您对您选择的设计感到满意,请随时将代码发送至 Code Review 。在那里您将获得改进当前代码的提示。

为了回答你的第一个更概念性的问题,你所写的绝对是实现你想要的东西的一种方法。您已经使用了工厂模式。您已经编写了一个 Branches 类,它提供了一个用于创建 Branch 类对象的接口(interface)。

createBranch 被称为工厂方法;它处理新对象的创建,并且在您的情况下,跟踪数组中的该对象。它还返回新对象,以便用户可以根据需要与 Branch 对象进行交互。

关于您的实现,需要考虑的一件事是 Branch 是私有(private)的,仅对 Branches 类内的代码可见。我想到了一些含义:

  1. 创建 Branch 对象的唯一方法是通过 createBranch 工厂
    • 因此将跟踪所有 Branch 对象
  2. Branch 构造函数的任何属性(即 Branch.property = value 之类的任何属性)都无法在 Branch 外部立即访问类。

这可能就是你想要的。但是,如果没有理由隐藏 Branch 构造函数或原型(prototype),那么我会建议其他设计模式。

一个好的策略可能是使用这些构造函数属性。这样,您可以大量减少代码,并且可以少处理一个类(但没有工厂方法):

function Branch() {
var _id = Math.round(Math.random() * 10);

this.getId = function () {
return _id;
};

Branch.branches.push(this);
}

Branch.branches = [];
Branch.getIds = function () {
var ids = [];
for (var i in Branch.branches)
ids.push(Branch.branches[i].getId());
return ids;
};

// test code
for (var i = 0; i < 7; i++) {
new Branch();
}

console.log("Branch IDs:\n" + Branch.getIds());

关于javascript - Javascript 中的容器类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32300994/

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