javascript - 对象可以自己保存值并返回它
问题描述
假设我们有这样的对象:
let person = {name: 'Ken', doSometing: ()=>{}, data:{}}
或这个:
let Person = function(name) {
this.name = name;
this.data = {};
this.doSometing = ()=>{};
};
let person = new Person('Ken');
我很感兴趣,有没有办法制作这样的对象,但是在单独调用对象时获取名称属性(名称可以是字符串、数字、对象等):
console.log(person) //Ken
反而:
console.log(person.name) //Ken
解决方案
这种设计的机械问题是基元(如字符串、数字和布尔值)不能有自己的属性。您可以向原语的关联原型添加一个属性,例如String.prototype.doSomething = function() { ... }
,这将允许您执行"foo".doSomething()
. (但不鼓励这样做,因为您不应该修改不属于您的对象。)但是,您不能将值附加到特定的原始字符串值,这意味着您无法实现data
以及name
您想要的方式。
相反,最好的选择可能是使用带有toString
方法的对象,该方法允许您将对象字符串化为所需形式的字符串。这不会以console.log
形式显示,但如果您向其添加一个空字符串,例如console.log(""+person)
.
如果您想让将来维护您的代码的任何人做噩梦,您可以通过将您的对象包含RegExp.prototype
在其原型链中来实现这一点。我强烈地、积极地劝阻你不要这样做,但假设我在法律上也没有能力阻止你;无论是否应该,(ab)RegExp.prototype
以这种方式使用在任何司法管辖区都不是(尚未)犯罪。
推荐阅读
- c# - 如何在 XElement 中获取一些特定的属性值
- python - pandas:按两列分组,然后按第三列的值排序
- swift - 如何在swift中购买应用程序后解锁UITabbar
- c# - 如何填充 dropDownList 上的所有 listItems - ASP
- angularjs - 如何使用 webpack 4.* 加载 angularjs 1.* ngRoute?
- vba - 运行时错误 1004:VBA 中的应用程序定义或对象定义错误
- c++ - 使用 C++ 更改 wia 扫描仪对话框上的默认选定颜色
- r - 如何使用 purrr 根据另一列中的值提取列表列中的元素
- javascript - Bootstrap - 滚动时带有动态内容的粘性导航栏、粘性侧边栏(左右)
- sql - 列被多次指定