创建原型字符串扩展时,如果我直接返回,结果是对象而不是字符串。例如:
Object.defineProperty(String.prototype, 'doSomething', {
value: function ()
{
return this;
}
});
var r1 = "Hello World";
if (typeof r1 === 'string')
{
alert('it is a string');
}
else
{
alert('it is a not string');
}
var r2 = r1.doSomething();
if (typeof r2 === 'string')
{
alert('it is a string');
}
else
{
alert('it is a not string');
}
会产生一条警告,上面写着“它是一个字符串”,后跟“它不是一个字符串”。我知道字符串原型继承自object,但是实际的字符串不应该具有相同的继承链吗?或者我应该在扩展名中返回之前始终调用.toString()吗?
如果是这种情况,这是真的吗?
'hello' !== new String('hello')
如果是这样,如果从字符串扩展方法返回,我们是否应该始终调用.toString()?是否应该对其他原始类型采用类似的过程?是否有一种可用于其他类型的通用方法(例如数组扩展)?