我正在尝试这样做:
String.prototype.clear = function(){
alert(this.value);
this = ''; // I want to set value to '' here
}
var temp = 'Hello';
temp.clear();// After this step temp should be ''
但是我的左手分配错误无效。我发现这个问题作为参考,但它并不是我想要的。 我也发现'这'是不可改变的。
那么,有什么方法可以完成我的任务吗?我不是在任何地方使用它。只是在玩耍。 感谢。
答案 0 :(得分:1)
您可以创建一个名为MyMutableString的类,如:
function MyMutableString(s) {
this.string = s;
this.clear = function() {
this.string = "";
}
}
现在您创建一个实例并使用它,如:
var s = new MyMutableString("my str");
s.clear(); // makes string stored inside object `s` empty
console.log(s.string);
答案 1 :(得分:1)
简而言之:
你不能。
字符串是不可变的。一旦完成,就永远不能改变字符串。
您必须将字符串设置为空字符串以“清除”它
var str = "String";
str='';
请注意,这不会更改字符串,但会将str
设置为新的字符串实例,旧的实例会被垃圾收集
它甚至比调用Object的Prototypes方法更短,它将完全相同。 和您不必使用本机对象原型进行调整
编辑 - 用于指出Florian Margaine
的Thx如果您有很多设置空字符串并且可能会更改清除的未来“定义”,您可以使用返回``或空字符串的函数
function clearString () {
return ''
}
var str = "Asd"
var str = clearString()
或者只是将变量设置为空字符串
var emptyString = ''
var str = "Asd"
str = emptyString //''
现在,如果您想将''
更改为null
或undefined
var emptyString = null
哪个也可以,因为原始数据类型是作为值而不是通过引用传递的
但我建议不要修改像这样的对象原型
答案 2 :(得分:0)
像这样的对象副本怎么样?
String.prototype.clear = function(){
alert(this);
return '';
}
var temp = 'Hello';
var newTemp = temp.clear();
alert(newTemp);
答案 3 :(得分:0)
除了创建包装器之外,最好的方法是使用功能方式。
String.prototype.clear = function() {
return '';
};
var t = 'hello';
t = t.clear();
为什么不只是做t = '';
,你说呢?好吧,今天清算可能意味着放''
,但这可能意味着明天放null
。有一点改变它可能是值得的。或者完全没有。