JavaScript String Prototype返回Object

时间:2017-10-18 03:11:06

标签: javascript prototype

创建原型字符串扩展时,如果我直接返回,结果是对象而不是字符串。例如:

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()?是否应该对其他原始类型采用类似的过程?是否有一种可用于其他类型的通用方法(例如数组扩展)?

0 个答案:

没有答案