Javascript 对象是否可以自行保存值并返回它

Javascript 对象是否可以自行保存值并返回它,javascript,Javascript,假设我们有这样的对象: let person = {name: 'Ken', doSometing: ()=>{}, data:{}} 或者这个: let Person = function(name) { this.name = name; this.data = {}; this.doSometing = ()=>{}; }; let person = new Person('Ken'); 我很有趣,有没有一种方法可以使对象像这样,但在单独调用对象时获

假设我们有这样的对象:

let person = {name: 'Ken', doSometing: ()=>{}, data:{}}
或者这个:

let Person = function(name) {
    this.name = name;
    this.data = {};
    this.doSometing = ()=>{};
};
let person = new Person('Ken');
我很有趣,有没有一种方法可以使对象像这样,但在单独调用对象时获得name属性(名称可以是字符串、数字、对象等等):

相反:

console.log(person.name) //Ken

这种设计的机械问题是,原语(如字符串、数字和布尔)不能有自己的属性。您可以向原语的关联原型添加属性,如
String.prototype.doSomething=function(){…}
,这将允许您执行
“foo.doSomething()
。(但不鼓励这样做,因为您不应该这样做。)但是,您不能将值附加到特定的基本字符串值,这意味着您无法实现所需的
数据
名称

相反,最好的选择可能是使用带有
toString
方法的对象,该方法将允许您将对象字符串化为所需形式的字符串。这不会显示在
console.log
表单中,但如果向其中添加空字符串,如
console.log(“+person”)
,则会显示


如果你想让将来维护你的代码的人做噩梦,你可以通过以下方法来实现。我强烈地、积极地劝阻你不要这样做,但假设我在法律上也不能阻止你;无论是否应该,(ab)以这种方式使用
RegExp.prototype
,在任何司法管辖区都不是犯罪。

对于
console.log
,您可以做的不多
console.log
是一个调试工具,因此它倾向于按原样显示对象,即使您覆盖
valueOf
toString
。来自@melpomene的评论突然提醒我,几年前我回答了一个类似的问题,并发明了一个相当麻烦的机制:。在那里听从我的劝告,后果自负。
console.log(person.name) //Ken