无法为字符串原型定义赋值为“this”

Unable to assign to the value of `this` for a string prototype definition

提问人:Gary 提问时间:6/8/2023 更新时间:6/8/2023 访问量:29

问:

无法将字符串原型定义的值赋值。this

function testfunction(thisValue) {
    thisValue = thisValue || this;
    thisValue = "new test";
    console.log(thisValue);
    this = thisValue; // this throws error
}

Object.defineProperty(String.prototype, 'testfunction', { value: testfunction, enumerable: true });

let s = "i am a test"
s.testfunction()

对于我正在使用的对象。分配新值有什么用。Arraythis.pushString

javascript 这个 原型 分配 defineproperty

评论

4赞 Pointy 6/8/2023
不能赋值给 ,字符串基元值是不可变的。this
0赞 Phaelax z 6/8/2023
是的,我意识到,我不假思索地在我的答案上跳了一下枪,所以我把它删除了。
0赞 Gary 6/8/2023
@Pointy真的.意识到我的坏。谢谢。

答:

1赞 Pointy 6/8/2023 #1

当然可以向 String 原型添加方法。有些人认为这很可怕,但我的感觉是,如果你小心翼翼,并且你理解了总体上和对你的特定宇宙的影响,那么它并没有那么糟糕。我不是你爸爸,所以做你想做的事。

也就是说,我不会将这些方法列举出来,因为这是修改标准原型的最大问题之一。此外,对于 String、Number 和 Boolean 等内容,您无法修改基础基元值,因为它们是不可变的。当您对字符串基元值调用方法时,发生的情况是,为了计算表达式的目的,实例化了一个包装对象,然后丢弃了该对象。因此,从基本基元字符串(或数字或布尔值)计算某些值的方法可以做一些有趣的事情,但你不能修改这些值。