2015-04-15 93 views
3

我正在使用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.

+1

「構造的內部對象的數量」不賺很多的意義。你可以用Object.keys(obj).length'來計算對象的枚舉屬性(不管屬性來自何處)。 – Pointy

+0

恩,你的意思是返回9,對吧? – adeneo

+0

您不必原型計數功能。很簡單,因爲EventData.length – manuerumx

回答

6

在最自然的方式這種情況下將存儲參數計數在某些屬性(可能是私人的)。我不知道爲什麼你需要這個,但是,是的,是這樣的:

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; 
}; 

UPD。根據編輯的問題,看起來就像要計算實例的自己屬性的數量。在這種情況下,您將使用方便的Object.keys方法,該方法返回屬性名稱的數組。

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

我正準備保存我的答案完全與你的答案一樣,所以我已經刪除它並upvoted,因爲它的一個相當不錯的方法:) – taxicala

+0

@dfsq我認爲他Op是指屬性目前,而不是通過的論據。參數。長度將給3,如果我們只傳遞3個參數 –

+0

這很酷... +1 –

3

剛剛獲得EventData對象的屬性與Object.keys陣列,然後在陣列的長度?

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

如果你想知道規範參數的數量,使用Function.length財產,你的情況:

EventData.length 

thisEventData.constructor.length 

注意,這將不計入額外的參數(可變參數),因爲它從構造函數對象中推斷計數。

如果你想知道構造對象的財產數量,使用Object.keys

Object.keys(thisEventData).length 

這會給你的自己屬性(不包括原型鏈)的數量。

或者只寫你自己的定製邏輯,如果你需要別的東西,比如,如果你想非falsey對象:

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

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

    return count; 
} 
相關問題