这是微不足道的,我已经忘记了。 可能有重复 - 我搜索了一下,发现类似,但找不到简洁。
String.prototype.test = function(){this.bar = this.length + 2;}
var str = "foo";
str.test();
console.log(str); // foo
console.log(str.bar); // undefined
非常确定它与this
被困在闭包中有关。
答案 0 :(得分:1)
其原因是字符串文字不是对象。但是,在后台,当您调用带有文字的字符串函数时,例如“ foo” .toUpperCase(),javascript运行时所做的就是用新的String(“ foo”)包装字符串。无论如何,这只会在您调用一些预构建的String函数时发生,而在使用原型创建新函数时不会发生。
编辑:您只能重写对象的原型。这就是为什么需要新关键字的原因。
答案 1 :(得分:0)
在这种情况下,与您创建字符串的方式有关。尝试:
var str = new String("Foo");
你会发现它神奇地工作。 : - ]