为功能添加值访问器

时间:2017-08-03 15:20:22

标签: javascript node.js

我似乎遇到了以下代码的一些问题:

var chart = function(d) {
  var width = 0; // default width
  var height = 0; // default height

  function my() {
    // generate chart here, using `width` and `height`
        console.log("The Input is " + d);
        console.log("chart height is " + my.height());
        console.log("chart width is " + my.width());
  }

  my.width = function(value) {
    if (!arguments.length) return width;
    width = value;
    return width;
  };

  my.height = function(value) {
    if (!arguments.length) return height;
    height = value;
    return height;
  };

return my;
}

当我设置var myvar = chart().width(20);然后再调用myvar.width()它仍然输出0,而不是像我期望的那样输出20并抛出错误Uncaught TypeError: Cannot read property 'width' of undefined。我觉得我非常接近解决方案,但我无法弄清楚如何解决这个问题。

我是使用get / set方法的新手,所以任何能让我走上正确道路的东西都会非常感激!

我使用Mike Bostocks以可重复使用的图表为基础。

编辑更新:我希望在my()函数中可以访问输入的宽度和高度。

3 个答案:

答案 0 :(得分:1)

您可以返回函数my。

,而不是调用函数my

这应该有效

HTTP Status 404

然后

var chart = function(d) { var width = 0; // default width var height = 0; // default height function my() { // generate chart here, using `width` and `height` console.log("The Input is " + d); console.log("chart height is " + my.height()); console.log("chart width is " + my.width()); } my.width = function(value) { if (!arguments.length) return width; width = value; return width; }; my.height = function(value) { if (!arguments.length) return height; height = value; return height; }; return my; }

这将给你20

答案 1 :(得分:0)

你打算做这样的事吗?

function chart(d) {
  var width = 0; // default width
  var height = 0; // default height

  function my() {
    // generate chart here, using `width` and `height`
        console.log("The Input is " + d);
        console.log("chart height is " + this.height());
        console.log("chart width is " + this.width());
  }

  my.prototype.width = function(value) {
    if (!arguments.length) return width;
    width = value;
    return this;
  };

  my.prototype.height = function(value) {
    if (!arguments.length) return height;
    height = value;
    return this;
  };

return new my();
}

var x = new chart().width(5).height(7); // sets width to 5 and height to 7
x.width() // returns 5
x.height() // returns 7

答案 2 :(得分:0)

我想我找到了一个解决方案,我觉得我的问题有点模糊。

 var chart = function(d) {
    var width = 0; // default width
    var height = 0; // default height

  function my() {
    // generate chart here, using `width` and `height`
    console.log(d);
    console.log("width " + width + " height " + height);
  }

  my.width = function(value) {
    if (!arguments.length) return width;
    width = value;
    return my;
  };

  my.height = function(value) {
    if (!arguments.length) return height;
    height = value;
    return my;
  };

  return my;
}

然后在主代码中编写chart("Test")()来调用内部函数。