无法覆盖";这";在javascript中使用String.prototype扩展字符串时
我想为javascript字符串创建一个可变的无法覆盖";这";在javascript中使用String.prototype扩展字符串时,javascript,string,prototype,immutability,Javascript,String,Prototype,Immutability,我想为javascript字符串创建一个可变的reverse方法 TL;医生: 以下是我的尝试,但没有成功: String.prototype.reverse = function() { var reversed = {}; j = 0; for (i = this.length - 1; i >= 0; i--) { reversed[j++] = this[i]; } for (i in reversed)
reverse
方法
TL;医生:
以下是我的尝试,但没有成功:
String.prototype.reverse = function() {
var reversed = {};
j = 0;
for (i = this.length - 1; i >= 0; i--)
{
reversed[j++] = this[i];
}
for (i in reversed)
{
this[i] = reversed[i];
}
};
它根本不会改变字符串,这个小测试进一步证明了这一点:
String.prototype.makeFirstCharX = function() {
console.log(this[0]); //h
this[0] = 'x'; //no error
console.log(this[0]); //h ??
};
str1.makeFirstCharX();
console.log(str1); //hello, not xello
本机JS类型的新原型函数中是否仍有覆盖this
值的方法?为什么像this[0]='x'
这样的东西不给出错误,而不是默默地失败?
---这是我在一个自定义JS对象上所做的尝试,该对象按预期工作,这也是我基于上述内容所做的:
我可以创建一个自定义可旋转字符串,其行为类似于本机字符串,如下所示:
function MyString(str) {
//set string content and length
var l = 0;
for (i in str)
{
this[i] = str[i];
l++;
}
this.length = l;
}
MyString.prototype.toString = function()
{
var retVal = '';
for (i = 0; i < this.length; i++)
{
retVal += this[i];
}
return retVal;
};
MyString.prototype.reverse = function()
{
var reversed = {};
j = 0;
for (i = this.length - 1; i >= 0; i--)
{
reversed[j++] = this[i];
}
for (i in reversed)
{
this[i] = reversed[i];
}
};
但是如果我在一个“真正的”javascript字符串上尝试同样的方法,它就不起作用了。括号符号不起作用。发件人: 对于使用括号表示法的字符访问,尝试删除或 为这些属性赋值将不会成功。属性 所涉及的内容既不可写也不可配置。(见 Object.defineProperty以获取更多信息。)
字符串在Javascript中是不可变的,因此您无法通过任何方式更改它们。括号表示法不起作用。发件人: 对于使用括号表示法的字符访问,尝试删除或 为这些属性赋值将不会成功。属性 所涉及的内容既不可写也不可配置。(见 Object.defineProperty以获取更多信息。) 字符串在Javascript中是不可变的,因此您无法通过任何方式更改它们。 从: 在JavaScript中,字符串是不可变的对象,这意味着 其中的字符不能更改,并且对其执行任何操作 字符串实际上创建新字符串。字符串由 引用,而不是按值。通常,当对象由指定时 引用,通过一个引用对对象所做的更改将被删除 通过对对象的所有其他引用可见。因为弦 无法更改,但是,您可以有多个对 字符串对象,不必担心字符串值会在没有 你知道吗 还有Javascript。这意味着您不会在任何地方修改原始字符串。你必须归还一些东西 下面是反向函数的一个简单实现:
function reverse(s) {
var reversed = '';
for (var i = s.length - 1; i >= 0; i--)
reversed += s[i];
return reversed;
}
您必须重新分配原始变量
var original = 'original';
original = reverse(original);
从:
在JavaScript中,字符串是不可变的对象,这意味着
其中的字符不能更改,并且对其执行任何操作
字符串实际上创建新字符串。字符串由
引用,而不是按值。通常,当对象由指定时
引用,通过一个引用对对象所做的更改将被删除
通过对对象的所有其他引用可见。因为弦
无法更改,但是,您可以有多个对
字符串对象,不必担心字符串值会在没有
你知道吗
还有Javascript。这意味着您不会在任何地方修改原始字符串。你必须归还一些东西
下面是反向函数的一个简单实现:
function reverse(s) {
var reversed = '';
for (var i = s.length - 1; i >= 0; i--)
reversed += s[i];
return reversed;
}
您必须重新分配原始变量
var original = 'original';
original = reverse(original);
简短回答:javascript中的字符串是不可变的简短回答:javascript中的字符串是不可变的谢谢,这至少解释了为什么覆盖它会自动失败。谢谢,这至少解释了为什么覆盖它会自动失败。