首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript闭包属性操作

Javascript闭包属性操作
EN

Stack Overflow用户
提问于 2015-06-05 19:56:07
回答 1查看 72关注 0票数 0

这里有几个帖子解决了这个问题,但没有一个对我的问题给出了明确而简洁的答案。

如果我有一个如下的函数;

代码语言:javascript
复制
function test(){
    var abc = "some value";

    return function concat(str) {
        return str + " " + abc;
    }
}

这样我就可以将一个字符串与闭包中包含的“某个值”字符串连接在一起,如下所示

代码语言:javascript
复制
var myStr = test()
console.log(myStr("this is"))

在定义myStr时,有没有什么方法可以操作abc变量?

我最近一直在使用d3,构建规模的工作方式如下;

代码语言:javascript
复制
var myScale = d3.scale.linear()
    .domain(...)
    .range(...)

我猜这在幕后是以类似于我想要实现的方式工作的。

编辑:这就是我想要实现的;

代码语言:javascript
复制
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?

EN

回答 1

Stack Overflow用户

发布于 2015-06-09 07:42:30

您可以在javascript中创建类,然后为闭包内部的值创建setter和getter。下面是一个示例:

代码语言:javascript
复制
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"))

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30665954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档