2016-09-27 15 views
0

私は最高のソリューションを探していましたが、私は本当にどんなキーワードを探すべきではありません。私は私の問題の説明のビットを必要とする:)私のコードを厥:JavaScriptオブジェクト/関数の別の内部へのアクセシビリティ

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.でしたが、すべてうまくいきました。

私が間違いを犯している場合は、それを指摘することもできます。前もって感謝します。

+0

コードはかなり混乱しています。 'var fluid = {};'とは何ですか? – passion

答えて

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を活用する場合は、このコードは見ずっと良くなることは注目に値する

は、私はちょうど私がちょうど私のコードでfluidthisあまりにも多くを変更することを実現し

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; 
    } 
} 
+0

それは動作しますが、それでも入れ子にされたコードはよりクリーンです。最初の関数宣言の後に毎回プロトタイプを使用するのは少し醜いようです。私は自分のアイデアをhttp://checkman.io/blog/creating-a-javascript-library/から取った。私はES2015の方法が好きです。tb32 :) – RaV

+0

それは問題ありませんが、コンストラクタを使用していません( 'new'キーワード)。あなたはあなたの用語を混同してはいけません;) –

0

ます。問題はそこにありました:

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

この小さな変更の後でもうまくいきます。

関連する問題