[英]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.keys
将EventData
对象的属性作为数组获取,然后获取数组的长度?
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.