Javascript 字符串的动态组合

Javascript 字符串的动态组合,javascript,string,dynamic,composition,Javascript,String,Dynamic,Composition,是否有可能以某种方式动态组合字符串?我读了一些关于按值传递和按引用传递的内容,因此我将所有字符串都创建为对象 例如: var foo = {str: 'foo'}; var bar = {str: foo.str + 'bar'}; var baz = {str: bar.str + 'baz'}; foo.str = 'fuu'; console.log(baz.str); //expected 'fuubarbaz', got 'foobarbaz 提前谢谢 不,当你静态地定义这样的东西时

是否有可能以某种方式动态组合字符串?我读了一些关于按值传递和按引用传递的内容,因此我将所有字符串都创建为对象

例如:

var foo = {str: 'foo'};
var bar = {str: foo.str + 'bar'};
var baz = {str: bar.str + 'baz'};
foo.str = 'fuu';
console.log(baz.str); //expected 'fuubarbaz', got 'foobarbaz

提前谢谢

不,当你静态地定义这样的东西时,他们会在调用变量时使用它。不过,您可以通过以下方式执行类似操作:


这之所以有效,是因为吸气剂的魔力;您不是静态地定义属性,而是定义一个在尝试访问属性时被调用的函数。通过这种方式,它可以对任何下游更改做出反应,因为它总是动态生成的。

不,当你静态地定义这样的东西时,它们会在调用变量时使用它。不过,您可以通过以下方式执行类似操作:


这之所以有效,是因为吸气剂的魔力;您不是静态地定义属性,而是定义一个在尝试访问属性时被调用的函数。通过这种方式,它可以对任何下游更改做出反应,因为它总是动态生成的。

它不是这样工作的,连接foo.str+只执行了一次,加号不是多次调用的函数

一种方法是创建一个包含3个字符串和一个方法的对象!:

常量对象={ a:‘福’, b:‘酒吧’, c:‘baz’, 显示:功能{ 返回这个.a+this.b+this.c; } }; console.logobj.show; 对象a=‘fuu’;
console.logobj.show 它不是这样工作的,连接foo.str+只执行了一次,加号不是一个被多次调用的函数

一种方法是创建一个包含3个字符串和一个方法的对象!:

常量对象={ a:‘福’, b:‘酒吧’, c:‘baz’, 显示:功能{ 返回这个.a+this.b+this.c; } }; console.logobj.show; 对象a=‘fuu’;
console.logobj.show 根据普迪的回答,我得出以下结论:

控制台。清除 变量foo={ //_str是str的存储 _str:‘foo’, //str的getter,在读取上下文中访问str时始终调用 获取str{返回此。\u str}, //str的setter,在写入上下文中访问str时始终调用 设置strstr{this.\u str=str} }; //读取上下文,因此调用foo的get str console.logfoo.str//foo 变量条={ //定义bar的getter函数,调用foo的getter函数 获取str{return foo.str+'bar'} }; //读取上下文,因此将调用bar的get str console.logbar.str//foobar var baz={ //定义baz的getter函数,调用baz的getter函数 获取str{return bar.str+'baz'} }; //读取上下文,因此调用baz的get str console.logbaz.str//foobarbaz //写入上下文,因此调用foo的set strstr。foo._str现在是fuu,是foo foo.str='fuu'; //读上下文,baz的getter被调用,它调用bar的getter,它调用foo的getter,foo返回值为'fuu'的_str
console.logbaz.str;//fuubarbaz根据puddi的回答,我得出以下结论:

控制台。清除 变量foo={ //_str是str的存储 _str:‘foo’, //str的getter,在读取上下文中访问str时始终调用 获取str{返回此。\u str}, //str的setter,在写入上下文中访问str时始终调用 设置strstr{this.\u str=str} }; //读取上下文,因此调用foo的get str console.logfoo.str//foo 变量条={ //定义bar的getter函数,调用foo的getter函数 获取str{return foo.str+'bar'} }; //读取上下文,因此将调用bar的get str console.logbar.str//foobar var baz={ //定义baz的getter函数,调用baz的getter函数 获取str{return bar.str+'baz'} }; //读取上下文,因此调用baz的get str console.logbaz.str//foobarbaz //写入上下文,因此调用foo的set strstr。foo._str现在是fuu,是foo foo.str='fuu'; //读上下文,baz的getter被调用,它调用bar的getter,它调用foo的getter,foo返回值为'fuu'的_str
console.logbaz.str;//fuubarbazYea这也是我最终得到的解决方案,尽管它感觉有点笨拙。是的,这也是我最终得到的解决方案,尽管它感觉有点笨拙。
let foo = {str: 'foo'};
let bar = {get str() { return foo.str + 'bar'; }};
let baz = {get str() { return bar.str + 'baz'; }};
foo.str = 'fuu';
console.log(baz.str); // properly outputs `fuubarbaz`