数组作为类javascript中的数据成员

array as data member in a class javascript

本文关键字:数据成员 javascript 数组      更新时间:2023-09-26

我是面向对象javascript的新手,正在尝试定义一个类,该类将数组作为数据成员。类的此数据成员将其他类的对象存储为数组。

这个的例子会更清楚

function classA(id, objB_01)
{
    this.id = id;   // data member that store a simple value
    this.arrayname = objB_01  // How multiple instance of classB is stored in this array 

}
function classB( id, name, status)
{
     this.id = id;
     this.name = name;
     this.status = status 
}
objB_01 = new classB("01", "john", "single");
objB_02 = new classB("02", "smith" "single");
objB_03 = new classB("03", "nina", "married");

现在我的问题是如何编写classA,使classA的单个实例包含一个数组,该数组存储classB 的多个对象

像这样的

objA = new classA("01",objB_01);
objA.arrayname = objB_02;
objA.arrayname = objB_03;

现在Finally objA包含一个字符串和一个数组,用于存储B类的多个对象

请给我指正确的方向

一个选项可以是在构造函数中初始化一个空数组,也可以有一些方法向数组中添加对象。

function classA (id) {
    this.id = id;
    this.array = [];
    this.add = function (newObject) {
        this.array.push(newObject);
    };
}

然后你可以这样做:

objA = new classA("01");
objA.add(objB_01);
objA.add(objB_02);
objA.add(objB_03);

深入研究JavaScript数组的规范文档可能会有一些好处。

除此之外,为了回答您关于拥有一个类a的问题,其中单个实例具有多个类B实例的数组-我相信您正在寻找数组方法。push()

同样,您可能希望利用JavaScript的标准重载构造函数模式来增强类定义。

像这样的

function classA(id, objarray)
{
    this.id = id;   // data member that store a simple value
    this.arrayname = objarray || []; //if objarray isn't passed it'll initiate an empty array 
}
function classB( id, name, status)
{
     this.id = id;
     this.name = name;
     this.status = status 
}
objB_01 = new classB("01", "john", "single");
objB_02 = new classB("02", "smith" "single");
objB_03 = new classB("03", "nina", "married");
var objBarray = [objB_01, objB_02, objB_03];
//now you can use construct & initiate classA in two different ways
//Push each object individually
var objA = new classA("01");
objA.arrayname.push(objB_01);
objA.arrayname.push(objB_02);
objA.arrayname.push(objB_03);
//or push the entire list at once
var objA = new classA("01", objBarray);

尝试

        var data = {};
        var classData = function (id, name, status, options) {
            if (options) {
                this.id = options.id;
                this[options.arrayname] = [];
            };
            if (!this.hasOwnProperty("id")) {
                throw new Error("No id set on `classData` array."
                + "Please set `id` for `classData` at `options` object")
            };
            var j = (id && name && status) ? JSON.stringify({
                id: id,
                name: name,
                status: status
            }) : false;
            j ? this[Object.keys(this).filter(function (v) {
                return v !== "id"
            })[0]].push(JSON.parse(j)) : null;
            return this
        }.bind(data);
        // set `id` at `data` , 
        // add first item to `data.arrayname` 
        classData("01", "abc", "single", {"id":"01", "arrayname":"files"});
        // set data at `data`
        classData("02", "def", "married");
        classData("02", "ghi", "single");
        // read `classData`
        console.log(classData());

        var data = {};
        
        var classData = function (id, name, status, options) {
            if (options) {
                this.id = options.id;
                this[options.arrayname] = [];
            };
            if (!this.hasOwnProperty("id")) {
                throw new Error("No id set on `classData` array."
                + "Please set `id` for `classData` at `options` object")
            };
            var j = (id && name && status) ? JSON.stringify({
                id: id,
                name: name,
                status: status
            }) : false;
            j ? this[Object.keys(this).filter(function (v) {
                return v !== "id"
            })[0]].push(JSON.parse(j)) : null;
            return this
        }.bind(data);
        // set `id` at `data` , 
        // add first item to `data.arrayname` 
        classData("01", "abc", "single", {"id":"01", "arrayname":"files"});
        // set data at `data`
        classData("02", "def", "married");
        classData("02", "ghi", "single");
        // read `classData`
        console.log(classData());