这里有几个帖子解决了这个问题,但没有一个对我的问题给出了明确而简洁的答案。
如果我有一个如下的函数;
function test(){
var abc = "some value";
return function concat(str) {
return str + " " + abc;
}
}这样我就可以将一个字符串与闭包中包含的“某个值”字符串连接在一起,如下所示
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?
发布于 2015-06-09 07:42:30
您可以在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"))
https://stackoverflow.com/questions/30665954
复制相似问题