Javascript 从原型函数更新对象值

Javascript 从原型函数更新对象值,javascript,object,prototype,Javascript,Object,Prototype,我正在尝试这样做: 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 '' 但是我得到了无效的左手赋值错误。我找到这个问题作为参考,但这不是我真正想要的。 我还发现“这”是不变的 那么,有没

我正在尝试这样做:

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 ''
但是我得到了无效的左手赋值错误。我找到这个问题作为参考,但这不是我真正想要的。 我还发现“这”是不变的

那么,有没有办法完成我的任务?我不会在任何地方使用它。只是玩玩而已。
谢谢。

您可以创建一个名为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);

像这样的对象副本怎么样

String.prototype.clear = function(){
    alert(this);
    return '';
}


var temp = 'Hello';
var newTemp = temp.clear();
alert(newTemp);

除了创建包装器外,最好的方法就是使用功能性方法

String.prototype.clear = function() {
    return '';
};

var t = 'hello';
t = t.clear();
为什么不直接做
t='',你说?好吧,今天清算可能意味着明天将
'
,但也可能意味着将
null
放入。只有一点可以改变,这可能是值得的。或者根本没有。

简而言之:

你不能

字符串是不可变的。一旦制作完成,字符串就永远无法更改

您必须将字符串设置为空字符串才能“清除”它

请注意,这不会更改字符串,而是将
str
设置为字符串的新实例,旧实例将被垃圾收集

它甚至比调用对象的prototype方法更短,而prototype方法也会做同样的事情。您不必对本机对象原型进行调整


编辑-Thx以指出这一点

如果多次设置空字符串,并且可能会更改将来清除的“定义”,则可以使用返回``的函数或空字符串

function clearString () {
    return ''
}
var str = "Asd"
var str = clearString()
var emptyString = ''
var str = "Asd"
str = emptyString //''
或者简单地将变量设置为空字符串

function clearString () {
    return ''
}
var str = "Asd"
var str = clearString()
var emptyString = ''
var str = "Asd"
str = emptyString //''
现在,如果要将
'
更改为
null
未定义

var-emptyString=null

这也会起作用,因为基本数据类型是作为值传递的,而不是通过引用传递的


但我建议不要修改对象原型,因为字符串是不可变的。。。字符串对象。你不应该弄乱本机对象原型。只做
temp='
))可能会重复为什么你需要添加一个只有RTE的原型方法?你可以只设置
t='
@Glutamat是的,我会这么做。但是,一种方法可能很方便。另外,今天清除可能意味着明天将
'
,但也可能意味着明天将
null
清除。这是正确的,很好的一点,您不必将
t='
的每次出现都更改为
t=null
,但是你可以使用一个简单的函数,甚至是一个变量来返回
因为你不能用像
t.clear()
这样的方法调用来清除它,所以没有必要向
String.prototype添加方法,但无论哪种方法都必须重新定义它
t=t.clear
=)