2012-11-20 48 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的意思是一个方法定义,而不是从构造函数返回。 –