2013-11-10 165 views
0

我總是創建以下列方式JavaScript對象的自定義處理時未定義字段:創建JavaScript對象

//object code 
function someObject() { 
    this.field1; 
    this.fiend2; 
} 

function makeSomeObject(data) { 
    var result = new someObject(); 
    result.field1 = data.field1DataName; 
    result.fiend2 = data.field2DataName; 
    return result; 
} 

//object instantiation 
var someObject = makeSomeObject(data); 
processObject(someObject); 

我現在想要更多防守做到這一點。換句話說,我想在設置它之前測試data.field1DataName。我試圖以下面的方式做到這一點。

//object code 
function someObject() { 
    this.field1; 
    this.fiend2; 
} 

function makeSomeObject(data){ 
    var result = new someObject(); 
    result.field1 = typeof data != "undefined" ? "field1DataNameUndefined": data.field1DataName; 
    result.field2 = typeof data != "undefined" ? "field2DataNameUndefined": data.field2DataName; 
    return result; 
} 

//object instantiation 
var someObject = makeSomeObject(data); 
processObject(someObject); 

現在,如果數據字段丟失,將在設置對象字段之前捕獲。問題是someObject仍然被創建,並且processObject將接受它,但知道有問題。我的問題是指示someObject有問題的最佳做法是什麼,所以我可以避免processObject中的問題。如果任何人有任何建議,在考慮這個問題的過程中,更好的做法在javascript中的防禦性編程,以及讚賞反饋。

回答

0

這就是我通常這樣做的方式,有一些extend方法和一個.defaults = {}對象,jQuery在這種情況下工作。

function SomeObject(data) { 
    $.extend(this, SomeObject.defaults, data); 
} 

SomeObject.defaults = { 
    field1: '', 
    field2: '' 
}; 

var newObject = new SomeObject({ field1: 'field1' }); 

console.log(newObject); 
// > { field1: 'field1', field2: '' } 

你可以說,我們已經定義了默認混入了SomeObject,因爲我們是$.extend荷蘭國際集團this。這樣我們可以讓$.extend處理null/undefined檢查。關於引發錯誤