从原型函数更新对象值

时间:2012-12-20 13:42:04

标签: 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 ''

但是我的左手分配错误无效。我发现这个问题作为参考,但它并不是我想要的。 我也发现'这'是不可改变的。

那么,有什么方法可以完成我的任务吗?我不是在任何地方使用它。只是在玩耍。 感谢。

4 个答案:

答案 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 //''

现在,如果您想将''更改为nullundefined

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。有一点改变它可能是值得的。或者完全没有。