簡體   English   中英

如何計算構造函數中對象的數量javascript

[英]How to count the number of objects in a constructor javascript

我正在使用 javascript 並想知道構造函數中的對象數量。

我有這個:

var EventData = function(ID, Name, StartDate, StartTime, EndDate, EndTime, Location, Notes){
  this.type = "event";
  this.id = ID;
  this.name = Name;
  this.startDate = StartDate;
  this.startTime = StartTime;
  this.endDate = EndDate;
  this.endTime = EndTime;
  this.location = Location;
  this.notes = Notes;
};
EventData.prototype.count = function(){
  return //some code;
};

我想這樣稱呼:

var Start = function(){
  var thisEventData = new EventData(1,"Bill", 1,1,1,1, "Home", "N/A");
  console.log(thisEventData.count());
};

thisEventData.count() 將返回 10。

在這種情況下,最自然的方法是將參數計數存儲在某些屬性中(可能是私有的)。 我不確定你為什么需要這個,但是,是的,像這樣:

var EventData = function (ID, Name, StartDate, StartTime, EndDate, EndTime, Location, Notes) {
    this._paramsCount = arguments.length;
    this.type = "event";
    this.id = ID;
    this.name = Name;
    this.startDate = StartDate;
    this.startTime = StartTime;
    this.endDate = EndDate;
    this.endTime = EndTime;
    this.location = Location;
    this.notes = Notes;
};
EventData.prototype.count = function () {
    return this._paramsCount;
};

更新。 根據編輯過的問題,您似乎想要計算實例的自身屬性數量。 在這種情況下,您將使用方便的Object.keys方法,該方法返回一個屬性名稱數組。

EventData.prototype.count = function () {
    return Object.keys(this).length;
};

只需使用Object.keysEventData對象的屬性作為數組獲取,然后獲取數組的長度?

EventData.prototype.count = function(){
  return Object.keys(this).length;
};

如果您想知道規范參數的數量,請在您的情況下使用Function.length屬性:

EventData.length

或者

thisEventData.constructor.length

請注意,它不會計算其他參數(變量參數),因為它會從構造函數對象推斷計數。

如果您想知道構造對象的屬性計數,請使用Object.keys

Object.keys(thisEventData).length

這將為您提供自己屬性的計數(不包括原型鏈)。

或者,如果您需要其他東西,只需編寫自己的可自定義邏輯,例如,如果您想要非虛假對象:

function getPropertyCount(obj, withPrototypeChain) {
    var prop;
    var count = 0;

    for (prop in obj) {
        if ((withPrototypeChain || obj.hasOwnProperty(prop)) && obj[prop])
            ++count;
    }

    return count;
}

在接受的答案上建立一點:

export class Person {
      constructor (name, age) {
        if (arguments.length !== 2) {
          throw new Error('invalid Person argument count')
        }
        this.name = name
        this.age = age 
      }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM