2012-11-20 60 views
-2

從對象返回值時遇到問題。 我的對象看起來像這樣。對象中的Getter未返回值Javascript

function XYZ(date, startT) 
    { 
    var _date=date; 
    var _startT=startT; 
    this.get_date = function() { 
     return _date; 
     }; 
     this.set_date = function(value) { 
     _date=value; 
     }; 
     this.get_startT = function() { 
     return _startT; 
     }; 
     this.set_startT = function(value) { 
     _startT=value; 
     }; 
     this.toString() 
     return (_date + " " _startT); 
     } 

然後我創建這樣

jsData[0] =new XYZ("2012-11-11","8:00"); 
    jsData[1] = new XYZ("2012-03-03","8:00"); 

數組時,我想用get_date方法並沒有返回我的價值,但get_startT方法工作正常。 當我用.toString方法顯示對象時,它也顯示我全部對象

請幫忙。

+0

我建議避免使用變量名的下劃線。改爲像這樣連接名稱:'longVariableName'。 – Cerbrus

+2

該代碼具有一系列語法錯誤,因爲您的JavaScript引擎應該向您顯示(在控制檯中,在瀏覽器上)。缺少'{',表達式已啓動,但從未完成。 'this.toString()'如果在它後面有一個分號(如果沒有分號引起語法錯誤,則由於接下來的分號)將是無操作的。從構造函數中返回一個字符串基元是另一個無操作。 –

+0

我在我的代碼中有{},當我調用這個方法時我只是缺少() alert(jsData [2] .get_date(); – bohunn

回答

1

它的工作原理,如果你解決所有的語法錯誤:

function XYZ(date, startT) { 
    var _date=date; 
    var _startT=startT; 
    this.get_date = function() { 
    return _date; 
    }; 
    this.set_date = function(value) { 
    _date=value; 
    }; 
    this.get_startT = function() { 
    return _startT; 
    }; 
    this.set_startT = function(value) { 
    _startT=value; 
    }; 
} 

var jsData = []; 
jsData[0] = new XYZ("2012-11-11","8:00"); 
jsData[1] = new XYZ("2012-03-03","8:00"); 

display("jsData[0].get_date() = " + jsData[0].get_date()); 

輸出:

jsData[0].get_date() = 2012-11-11

Live Copy | Source

除了明顯的錯別字,這裏就是我所做的:

  • {}函數體周圍。

  • 刪除了不起作用的this.toString()(沒有操作,因爲您沒有將結果存儲在任何地方)。

  • 在最後刪除了返回值,因爲從構造函數中返回一個字符串基元是另一個無操作。

  • 宣佈jsData

  • 初始化jsData

0

你出現在你的代碼的末尾缺少一個左括號{

function XYZ(date, startT) 

一項。 (}

+0

對不起,我只是打字快,忘了..但這不是整個故事的要點 – bohunn

+4

@PawełBoruń:當張貼要求人們花時間幫助你的代碼時,花時間檢查你是否發佈了正確的(或更好的是,使用複製和粘貼 - 因爲你*試圖簡化的東西,並在發佈之前運行簡化版本,對吧?) –

+0

@TJCrowder mea culpa ...我不想要複製這麼多行,只是問題的主要來源。謝謝幫助:) – bohunn

0

嘗試添加方法的函數原型如下:

function XYZ(date, startT) { 
    this._date = date; 
    this._startT = startT; 
} 

XYZ.prototype.get_date = function() { 
    return this._date; 
} 
XYZ.prototype.set_date = function(value) { 
    this._date = value; 
} 
XYZ.prototype.get_startT = function() { 
    return this._startT; 
} 
XYZ.prototype.set_startT = function(value) { 
    this._startT = value; 
} 
XYZ.prototype.toString = function() { 
    return this._date + " " + this._startT; 
} 

var myXYZ = new XYZ("2012-11-11","8:00"); 
myXYZ.toString(); // "2012-11-11 8:00" 

我測試,在控制檯和它正確地輸出最終字符串。

+0

我建議不要這樣使用它。您通常希望您的(僞)類的函數在類中定義。 – Cerbrus

+0

你從根本上改變他的代碼(使屬性公開),而不是解釋爲什麼他發佈的內容不起作用。 –

+0

夠公平的。爲了保護我的方法,我認爲繼承原型方法會更好,但這可能不是問題(也不是問題的一部分)。我猜(儘管在給出的例子中語法錯了)toString的意思是一個方法定義,而不是從構造函數返回。 –