这里有几个线程可以解决这个问题,但没有一个线程可以清楚简洁地回答我的问题。
如果我有以下功能;
function test(){
var abc = "some value";
return function concat(str) {
return str + " " + abc;
}
}
这样我可以将字符串与闭包中包含的“some value”字符串连接起来,如下所示
var myStr = test()
console.log(myStr("this is"))
在某种程度上我可以在定义myStr时操作abc变量吗?
我最近一直在与d3合作,建筑规模如下:
var myScale = d3.scale.linear()
.domain(...)
.range(...)
我猜测它的幕后工作方式与我想要实现的方式类似。
编辑:这是我想要实现的目标;
function test(){
var abc = "some value";
function concat(str) {
return str + " " + abc;
}
concat.abc = function(value) {
if (!arguments.length) { return abc;}
abc = value;
return concat;
}
return concat;
}
var myStr = test()
.abc("another test")
console.log(myStr("this is"))
不确定我是否完全关注正在发生的事情。
concat.abc是否引用了concat中的abc属性?为什么我们从concat.abc属性定义中返回concat?
答案 0 :(得分:0)
您可以在javascript中创建类,然后为闭包内的值创建setter和getter。 这是一个例子:
function test() {
var abc = "default value";
this.setAbc = function(text) {
abc = text;
return this;
}
this._concat=function(str) {
return str + " " + abc;
}
}
var myStr = new test();
document.write(myStr.setAbc("new value")._concat("this is"))