为对象创建“默认”值

时间:2014-01-05 02:27:00

标签: javascript

现在在我提出问题之前,我只想说我知道字符串在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

3 个答案:

答案 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());

Demo

根据toString docs

  

每个对象都有一个自动调用的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]
}