另一个内部的Javascript对象/函数可访问性

时间:2016-09-27 07:54:52

标签: javascript javascript-objects

我一直在寻找最佳解决方案,但我真的不应该寻找什么关键字。我需要对我的问题进行一些解释:)这就是我的代码:

function fluidEdge(params) {
  var fluid = {};
  fluid.point = function(config){
    fluid.x = config.x;
    fluid.y = config.y; 
  };
  fluid.renderShape = function(params){
    params = params || {};
        var x = params.x || 0;
        var y = params.y || 0;
    point = new fluid.point({
      x: x,
      y: y
    });
    console.log(point.x);
  };

  return fluid;
}

var test = new fluidEdge({});

test.renderShape({x: 50, y: 100});

Fiddle

我的例子要复杂得多,所以我无法重建代码,我已经尽可能地简化了代码。我想访问fluid.point内的fluid.renderShape功能。我不知道我怎么做,我尝试了几种方法。

在我没有使用var fluid = {};fluid.到处this.之前,一切都运行良好。

如果我犯了任何错误,你也可以指出这一点。提前谢谢。

2 个答案:

答案 0 :(得分:1)

您似乎对构造函数和函数的工作方式略有混淆。您的代码应该看起来像这样:

function FluidEdge(params) {}

FluidEdge.Point = function(config) {
  this.x = config.x;
  this.y = config.y;
}

FluidEdge.prototype.renderShape = function(params) {
  params = params || {};
  var x = params.x || 0;
  var y = params.y || 0;

  var point = new FluidEdge.Point({x: x, y: y});

  console.log(point.x);
}

var test = new FluidEdge({});
test.renderShape({x: 50, y: 100});

注意使用prototype来表示构造函数的方法,并使用this来引用构造的对象。

另请注意,将构造函数放在实例变量上通常是个坏主意,除非您知道自己在做什么并且有充分的理由。

值得注意的是,如果您利用ES2015功能,此代码会更好地

class FluideEdge {
  renderShape({x = 0, y = 0}) {
    var point = new FluidEdge.Point({x, y});
    console.log(point.x);
  }
}
FluidEdge.Point = class {
  constructor({x, y}) {
    this.x = x;
    this.y = y;
  }
}

答案 1 :(得分:0)

我刚才意识到我在代码中只是将this更改为fluid。问题出在那里:

fluid.point = function(config){
  this.x = config.x;
  this.y = config.y; 
};

经过那么小的改变后,它运作良好。