我们可以创建简单的东西:
getName() { return 'My Name';}
还有一个返回对象的方法,其中包含更多方法,例如:
getName() {
var name = 'My Name';
return {
raw: function() { return name; }
decorate: function() { return '・°☆.。' + name + '.☆*・°☆'; }
};
}
如何结合这两种想法,如果a方法称为getName()
,则它返回一个字符串。同时,您仍然可以像扩展方法一样调用其方法,例如getName().decorate()
(或getName.decorate()
?)。
答案 0 :(得分:3)
除非您传入用于决定返回某件事的参数,否则您不能使getName
返回既是字符串又是非字符串的东西宾语。通过返回带有返回字符串的toString
方法的对象(您可能还提供valueOf
),可以得到 close ,但不是全部闭合:
function getName() {
var name = 'My Name';
return {
toString() { return name; },
valueOf() { return name; },
decorate() { return '・°☆.。' + name + '.☆*・°☆'; }
};
}
console.log(String(getName()));
console.log("The name is: " + getName());
console.log(getName());
console.log(getName().decorate());
但是请记住,它总是返回一个对象。当某人尝试将对象转换为带有提示“字符串”的基元时,将触发toString
。当某人尝试将该对象转换为带有提示“ number”的图元时,将触发valueOf
。 (在两种情况下,如果第一个方法不可用或返回一个对象,则调用另一个方法; details in the spec。)
答案 1 :(得分:1)
首先想到的是,您可以选择传递一些参数作为第一个或第二个调用。
decorate = (name) =>
{
console.log('・°☆.。' + name + '.☆*・°☆');
return '・°☆.。' + name + '.☆*・°☆';
}
raw = (name) =>
{
console.log(name);
return name;
}
getName = (option) =>
{
var name = 'Name';
if (!option) { //default
console.log(name + " Whatsup");
return name + " Whatsup";
}
return (option === 'decorate' ? decorate(name) : raw(name));
}
getName();