我之前asked是一个非常相似的问题,而this answer我知道,当放在其他字符串中时,可以创建返回字符串的对象。这将是一些基于该答案的代码,它允许对象具有自定义字符串返回值:
function myString(value) {
this.String = value;
}
myString.prototype.toString = function() {
return this.String;
}
var strObj = new myString('Foo');
//>> strObj
//<< myString {String: "Foo", toString: function}
//>> strObj+''
//<< "Foo"
//What I want in addition to this:
//>> +strObj
//<< 42
我最初通过查看字符串中Date
个对象的效果来了解原始问题。所以,由于Date
对象的另一个特性可能非常有用,我想知道我是否有办法像{{1}那样做同样的事情。对象在表达式中使用时(转换为数字):
Date
我希望我的+new Date(); //1401414068943
对象也能这样做。我试图在对象中继续原型myString
的思维模式,但是虽然有一种JS方法可以转换为字符串,但是没有方法 - 只有本机函数 - 来转换非 - 字符串数。
我可以这样做&#39;自动对象转换&#39;对于我自己的物品,或者这种魔法只适用于toString
,因为它原生于JS?
我希望语法为
Date
如果可能的话。
答案 0 :(得分:3)
我相信您正在寻找处理对象到数字转换的原型方法是Object.prototype.valueOf()
可以在更改toString()
请注意,如果标准转换可以重新定义为与预期不同的行为,则可能会将其他程序员(包括您自己在未来日期)混淆,这种情况可能会被视为不良风格。
答案 1 :(得分:2)
toString
是在字符串上下文中使用对象时调用的方法(更确切地说,在调用ToString时)。是的,当在数字上下文(ToNumber)中使用objet时,会调用类似的方法:valueOf
。如果其中任何一个不存在,则使用另一个,有关详细信息,请参阅DefaultValue算法。
function MyHybrid(str, num) {
this.string = str;
this.value = num;
}
MyHybrid.prototype.toString = function() {
return this.string;
};
MyHybrid.prototype.valueOf = function() {
return this.value;
};
var hybrid = new MyHybrid('Foo', 42)
String(hybrid) // "Foo"
Number(hybrid) // 42
但是,必须注意的是,您用于转换为字符串的strObj+''
不调用ToString。 +
operator可以对数字和字符串起作用,因此只会在没有类型提示的情况下调用ToPrimitive - 在这种情况下valueOf
是首选(除非它是Date
个对象)。 hybrid+''
相当于42+''
,会产生"42"
。