var string = function (base) {
return {
add: function (added) {
return base + added;
}
}
}
text = string("robots").add(" are awesome");
console.log(text);
// robots are awesome
text2 = string("robots").add(" are awesome").add(" everytime!");
console.log(text2);
// TypeError: Object robots are awesome has no method 'add'
如何使这项工作?如何在函数范围内的某些对象之间共享方法“添加”?
答案 0 :(得分:2)
如果您只返回string(base + added)
。它将无法正常工作。当你console.log
时,它会返回一个对象。
var string = function (base) {
return {
add: function (added) {
return string(base + added);
}
}
}
console.log(string("test ").add("this ").add("thing"));
// outputs [object Object]
以上示例无法满足您的需求。你可以试试这个:
var string = function (base) {
return {
add: function (added) {
base += added;
return string(this.toString());
},
toString: function() {
return base;
}
}
}
console.log(string("test ").add("this ").add("thing").toString());
// outputs "test this thing"
这将正确输出。
您还可以扩展String.prototype并添加add
方法。
答案 1 :(得分:1)
这可以是具有功能继承和级联的achieved。这似乎是OP的目标。没有假经典继承。
var string = function (someStartString) {
var that = {
append: function (newString) {
that.currentString += newString;
return that;//enable cascades
}
,currentString: someStartString
};
return that;
}
示例调用
var textObj = string("robots").append(" are awesome");
console.log(textObj.currentString);//output: robots are awesome
// robots are awesome
var text2Obj = string("robots").append(" are awesome").append(" everytime!");
console.log(text2Obj.currentString);//output: robots are awesome everytime!
答案 2 :(得分:0)
您想从string
函数返回add
:
var string = function (base) {
return {
add: function (added) {
return string(base + added);
}
}
}
答案 3 :(得分:0)
您可以执行以下操作:
var string = function (base) {
return {
add: function (added) {
return string(base + added);
},
toString: function() {
return base;
}
}
}
修改:您可能还想添加toString
方法。
答案 4 :(得分:0)
您将返回一个纯字符串,而不是构造函数的实例。在普通字符串上,.add
不可用。
您可以通过返回一个新实例来解决此问题,以便.add
函数可用于结果:
return string( base + added );
然后它基本上是这样的:
string("robots").add(" are awesome").add("everytime!");
string("robots are awesome").add("everytime!");
string("robots are awesomeeverytime!");
而不是:
string("robots").add(" are awesome").add("everytime!");
"robots are awesome".add("everytime!");
<error>