更改Primitive-String一个字符串对象引用

时间:2016-05-27 11:52:00

标签: javascript string ecmascript-6 ecmascript-5

忽略所有最佳实践,我有一个相当学术性的问题,我会要求好奇心。

如您所知,您可以将自定义属性添加到字符串对象:

var s = new String("initial string");
var s.customProperty = "Please Don't Forget about me";

是否可以(不创建新的字符串对象)更改" s" 引用的字符串原语?

具体来说,我想更改" s" (上图),以便 s =="新字符串" ,在进行此更改后,我希望 s.customProperty 仍然指向字符串原语:"请不要忘记我" 。同样,我想要实现这一点而无需创建任何新的字符串对象。

var s = new String("initial string");
var s.customProperty = "Please Don't Forget about me";

// What code must preceed the following "if statement" in order
// for it to return "true" (giving the restrictions I described
// in the paragraphs of this post)?

if(s == "new string" && s.customProperty == "Please Don't Forget about me")
{
    console.log("true");
}
else
{
    console.log("false");
}

换句话说,是否可以更改字符串对象的引用指针而不会丢失或克隆已添加到该字符串对象的所有自定义属性?

2 个答案:

答案 0 :(得分:4)

  

是否可以更改" s"引用?

没有。它包含的[[StringData]](ES6)/ [[PrimitiveValue]](ES5)是internal slot,无法进行变异。

  

...无需创建任何新的字符串对象。

没有办法解决这个问题。

您可以做的是继承String并覆盖所有方法以引用可变属性,但该建议与不使用String对象和"不使用CallbackManager callbackManager; LikeView likeView; 对象一样好#34 ;.另请参阅反问题Is there a way to Object.freeze() a JavaScript Date?的答案。

答案 1 :(得分:-1)

String prototype救援!

所以基本上是这样的:

String.prototype.customProperty = "Please Don't Forget about me";

然后你可以这样称呼它:

"Your string".customProperty