Javascript 如何创建一个在默认情况下返回值但同时具有扩展方法的方法?

Javascript 如何创建一个在默认情况下返回值但同时具有扩展方法的方法?,javascript,javascript-objects,Javascript,Javascript Objects,我们可以创造一些简单的东西,比如: getName() { return 'My Name';} 以及一个方法,该方法返回一个对象,其中包含更多方法,如: getName() { var name = 'My Name'; return { raw: function() { return name; } decorate: function() { return '・°☆.。' + name + '.☆*・°☆'; } }; } 如何

我们可以创造一些简单的东西,比如:

getName() { return 'My Name';}
以及一个方法,该方法返回一个对象,其中包含更多方法,如:

getName() {
    var name = 'My Name';
    return {
        raw: function() { return name; }
        decorate: function() { return '・°☆.。' + name + '.☆*・°☆'; }
    };
}

如何将这两种思想结合起来,如果a方法被称为
getName()
,它将返回一个字符串。同时,您仍然可以像调用扩展方法一样调用它的方法,如
getName().decoration()
(或
getName.decoration()
?)。

除非您传入它用来决定返回一件事或另一件事的参数,不能使
getName
返回既是字符串又是非字符串对象的内容。通过使用返回字符串的
toString
方法返回一个对象(您还可以提供
valueOf
),可以接近,但不是全部接近:

函数getName(){ var name=‘我的名字’; 返回{ toString(){return name;}, valueOf(){return name;}, 装饰(){return'・°☆.。' + 名称+'。☆*・°☆'; } }; } log(字符串(getName()); log(“名称为:“+getName()”); log(getName());
console.log(getName().decoration());我想到的第一件事是将某些内容作为参数传递给第一个或第二个调用,由您选择

装饰=(名称)=> { console.log('・°☆.。' + 名称+'。☆*・°☆'); 返回'・°☆.。' + 名称+'。☆*・°☆'; } 原始=(名称)=> { console.log(名称); 返回名称; } getName=(选项)=> { 变量名称='name'; 如果(!option){//默认值 控制台日志(名称+Whatsup); 返回名称+“Whatsup”; } 返回(选项=='decort'?decort(名称):raw(名称)); }
getName();这太好了!这是最接近的方法吗?第三个
控制台.log
按照您的解释返回整个对象。@ColdCerberus-这是您能得到的最接近的方法,是的。