我一直在寻找最佳解决方案,但我真的不应该寻找什么关键字。我需要对我的问题进行一些解释:)这就是我的代码:
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});
我的例子要复杂得多,所以我无法重建代码,我已经尽可能地简化了代码。我想访问fluid.point
内的fluid.renderShape
功能。我不知道我怎么做,我尝试了几种方法。
在我没有使用var fluid = {};
和fluid.
到处this.
之前,一切都运行良好。
如果我犯了任何错误,你也可以指出这一点。提前谢谢。
答案 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;
};
经过那么小的改变后,它运作良好。