我有一个javascript类Data
,其中我试图获取对象的字符串表示形式:
function Data(t, s, m) {
this.time = t;
this.sender = s;
this.message = m;
var stringRep = function() {
return ("time:" + this.time + " sender:" + this.sender + " message:" + this.message)
};
console.log(this.stringRep); //returns undefined
var typeRep = (jQuery.type(1234));
console.log(this.typeRep); //returns undefined
Data.prototype.toString = function DataToString() {
var ret = "time:" + this.time + " sender:" + this.sender + " message:"
+ this.message;
return ret;
}
console.log(this.toString()); //returns correct toString representation
}
首先,我尝试使用stringRep
,undefined
。然后我甚至试图得到简单的类型。 1234使用typeRep
并返回undefined
。最后,我从MDN获得了帮助,正确覆盖了toString
方法。
之前的方法出了什么问题?
答案 0 :(得分:2)
您正在处理范围问题。首先,您的stringRep
函数未定义为Data
的属性,仅作为变量。你想要做的是:
function Data(t, s, m) {
this.stringRep = function() {
// Your definition goes here
};
// Now you can call it like so
console.log(this.stringRep());
};
至于你的toString
,你正确地覆盖了它,但如果你在构造函数中这样做,那么每次生成一个新的Data
实例时都会重新创建它。相反,试试这个:
function Data(t, s, m) {
// All of your code except for toString
};
Data.prototype.toString = function() {
var ret = "time:" + this.time + " sender:" + this.sender + " message:"
+ this.message;
return ret;
};
答案 1 :(得分:0)
您使用var stringRep和var typeRep创建了2个局部变量,但后来尝试使用this.stringRep和this.typeRep将它们作为Data类的字段记录,或者替换两个" var&#34 ;关键字" this。"或删除这两个"这个。"在日志命令中。
答案 2 :(得分:0)
你犯了两个错误:
stringRep
定义为私有变量,并尝试调用它
做this.stringRep
。您需要将其定义为属性
执行this.stringRep = function(){ //...}
stringRep
是一个函数,您需要执行this.stringRep()
执行它。顺便说一句,你应该避免覆盖toString()
方法。
答案 3 :(得分:0)
基本上,stringRep
和typeRef
都被定义为私有变量,但您尝试将它们用作字段。因此,理想情况下,您应该使用this.
前缀定义两个变量,或者只是避免使用this.
前缀调用这两个变量。