现在在我提出问题之前,我只想说我知道字符串在js上是原始的,我知道你不能为它们添加属性。只是为了在任何人提起它之前解决问题。
我的问题是,是否可以使对象具有某种默认值,就像日期对象拥有它一样。对于typeof date
,如果使用日期对象,它将返回"object"
,但如果将其放在字符串中,它将自动更改为"Sun Jan 01 2000 01:23:45 GMT+0000 (ABC)"
。
是否可以创建一个行为相同的对象?或者该行为是日期对象专有的吗?
我可以使用它的一个例子是在运行函数时,我希望默认返回一个字符串,但也会发送额外的数据。例如:
function getUser(index) {
return {
defaultVal: userNames[index],
extraData: {points:userPoints[index]}
}
}
alert("your name is "+getUser(userId))
//will alert the user's name, instead of json object
答案 0 :(得分:2)
我相信你想要覆盖toString()
方法。
getUser.prototype.toString() = function() {
return this.stringRepresentation;
};
答案 1 :(得分:1)
根据alert's docs
,
message是要在警报中显示的可选文本字符串 对话框,或者,转换为字符串的对象 并显示。
因此,您需要覆盖默认的toString
方法,以便在alert
中表示您的对象。
function myString (value) {
this.actualValue = value;
}
myString.prototype.toString = function() {
console.log("Inside myString.toString, returning", this.actualValue);
return this.actualValue;
};
function getUser() {
var myUser = new myString("Bruce Wayne");
myUser.extraData = "I am BatMan!";
return myUser;
}
alert(getUser());
每个对象都有一个自动调用的toString()方法 该对象将表示为文本值或对象是 以预期字符串的方式引用。默认情况下 toString()方法由来自Object的每个对象继承。 如果在自定义对象中未覆盖此方法,则toString() 返回“[object type]”,其中type是对象类型。
因此,即使在像字符串一样使用对象的表达式中,我们定义的这个新函数也会被调用。例如,
console.log("The value of the Object is " + getUser());
答案 2 :(得分:0)
那么你实际上可以为字符串添加属性,比如
String.prototype.foo=function(bar){
return this+bar;
}
var str="hello, ";
alert(str.foo("world!"));
所以我认为你可能想要的是这样的东西
myObj={foo:"bar","hello":world,toString:function(){
return this.foo+", "+this.world;
}};
然后打印出myObj
myObj.toString()
或者在你的情况下,像这样
getUser.prototype.toString=function(){
return this.defaultVal+this.extraData.userPoints[index]
}