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
=)