对象可以自己保存值并返回

时间:2019-05-14 19:46:44

标签: 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

1 个答案:

答案 0 :(得分:1)

此设计的机械问题是基元(如字符串,数字和布尔值)不能具有自己的属性。您可以向原语的关联原型添加属性,例如String.prototype.doSomething = function() { ... },这将允许您执行"foo".doSomething()。 (但是不建议这样做,因为您不应该modify objects you don't own。)但是,您不能将值附加到特定的原始字符串值,这意味着您无法实现dataname想。

相反,最好的选择可能是使用带有toString方法的对象,该方法将使您可以将该对象字符串化为所需形式的字符串。这不会以console.log的形式显示,但是如果您向其中添加了一个空字符串(如console.log(""+person)),则会显示出来。

如果您想给将来维护您代码的任何人做噩梦,可以通过having your object include RegExp.prototype in its prototype chain实现。我强烈,积极地劝阻您不要这样做,但前提是我在法律上也无法阻止您。是否应该(ab)以这种方式使用RegExp.prototype在任何司法管辖区都不是犯罪。