2016-03-21 3 views
1

元の質問は保留に設定されていましたので、別の言い回しで新しい試みがあります。Javascript:クラスコンストラクタの基礎 - 別のメソッドでプロパティを定義

質問:プロトタイプを使用するのではなく、プライベートな方法で次のことを行うにはどうすればよいですか?

function numberPlusFive(nr) { 
    this.number = number + 5; 
    this.square = this.calculateSquare(); 
    this.isPrime = this.checkIfPrime(); 
} 
numberPlusFive.prototype = { 
    calculateSquare: function() { 
     return this.number * this.number; 
    }, 
    checkIfPrime: function() { 
     // check if this.number is a prime number 
     return true; // or false 
    }, 
} 

メソッド(calculateSquare、checkIfPrime)は、いったんクラスが構築されると、もう必要ありません。私は計算を別々の方法で行いたいですが、公開する方法は必要ありません。

重要:私は、この例では、this.numbercalculateSquarecheckIfPrimeで利用可能でなければならない(さらに計算のために既に計算のプロパティを必要とする - と、いや、私はちょうどので、実際のスクリプトでthis.numberを再計算することはできません計算に時間がかかります)。

+0

そこで質問は何ですか? – hindmost

+0

質問:パブリックメソッドとして 'calculateSquare&checkIfPrime'が必要ですか? –

+0

いいえ、パブリックメソッドとしてcalculateSquareとcheckIfPrimeは必要ありません – am2124429

答えて

2

あなたは、コンストラクタ内calculateSquareとcheckIfPrime関数を宣言し、別のオブジェクトを返すことができます。

function myFirstJsClass(number) { 

    var calculateSquare = function(n) { 
     return n * n; 
    }; 

    var checkIfPrime = function(n) { 
     //check if prime 
     return true; // or false 
    }; 

    this.number = number; 
    this.square = calculateSquare(number); 
    this.isPrime = checkIfPrime(this.square); 

} 

また、外部に宣言してコンストラクタで呼び出すこともできます。

var calculateSquare = function(n) { 
    return n * n; 
}; 

var checkIfPrime = function(n) { 
    //check if prime 
    return true; // or false 
}; 

function myFirstJsClass(number) { 
    this.number = number; 
    this.square = calculateSquare(number); 
    this.isPrime = checkIfPrime(this.square); 
} 

あなたはまた、(呼び出しを使用して関数を呼び出すことができるパラメータとして、すべてを渡したくない場合)http://www.w3schools.com/js/js_function_invocation.asp

var calculateSquare = function() { 
    this.square= this.number * this.number; 
}; 

var checkIfPrime = function() { 
    //check if prime with this.square 
    this.isPrime = true; // or false 
}; 

function myFirstJsClass(number) { 
    this.number = number; 
    calculateSquare.call(this); 
    checkIfPrime.call(this); 
} 
+0

あなたの例は、実際のところどのような形でも「クラス」ではなく、単にオブジェクトジェネレータです。 – Neal

+0

スニペットを修正しました。私は主なヒントはまだ立っていると思う:彼は、コンストラクタ内の変数として、または外部的に関数を定義することができ、2つの関数の中の "this"プロパティに依存しない。 –

+0

私によく見えます:-)アップデートありがとう – Neal

1

は、生命維持

var MyClass = (function() { 
    let calcSquare = number => number * number; 
    let isPrime = number => { /* your prime code */ }; 
    class MyClass { 
     constructor(number) { 
      this.square = calcSquare(number); 
      this.isPrime = isPrime(number); 
     } 
    } 

    return MyClass; 
})(); 

に、これらの機能は、単にプライベート関数であり、あなたが欲しいしかし、使用することができますこの方法を使用してください。

それがその後、イマイチ場合はあなたがする必要があるだろう、すべてがちょうどMyClassや他の機能の意志をエクスポートされ、技術的にあなたはES6で生命維持を必要としませんが、私はちょうどあなたのコードのすべてを1つのファイルにあったと仮定プライベートで)


またはES6なし:。

var MyClass = (function() { 
    var calcSquare = function(number) { return number * number; }; 
    var isPrime = function(number) { /* your prime code */ }; 

    function MyClass(number) { 
     this.square = calcSquare(number); 
     this.isPrime = isPrime(number); 
    } 

    return MyClass; 
})(); 
+1

もしあなたが既にES6と 'class'を使っているのであれば、単にクラスをエクスポートするのではなく、関数をコピーするのではなく、 – ssube

+0

ssube True :-)しかし、OPは彼が他のどのようなモジュールも使っているとは言いませんでしたが、外部ファイルの場合はiifeは必要ありません:-) – Neal

+0

すべてのコードは1つのファイルにあります問題ない。これらのクラスの使い方の例を追加できますか?番号を渡す方法がわかりません。そして、私は自分の質問を編集しました。私は、私の素敵なコードでcalcSquareの結果を使う必要があります。これは2つの提案のいずれでも可能ですか? – am2124429

関連する問題