0

ここにある短いコードでこの質問を紹介しましょう。

function SomeObject() {
// Personaly I call this part initialization...
this.anything = "anything";

// ... but here somebody call function init...
this.init();
}

// ... which is declared there...
SomeObject.prototype.init = function () {

// ... and contains more initialization. 

}

ここで質問があります: この init 関数の実装にはどのような利点がありますか?

私が見る唯一の利点は、init後でインスタンスで関数を使用し、そのプロパティやその他のものの一部を再初期化できることです。しかし、私が持っているコードでは、それを行う意味はありません。ましてや、そんなことをしたら、いろいろ壊れてしまう。それ以来、この実装以外に違いがあるかどうかはわかりません:

function SomeObject() {
    init.call(this);
}

function init() {        
}

さらに、コンストラクターをより多くの部分に分割する理由がわかりません。だから、私は何か重要な恩恵や自然さを本当に逃さなければならなかったと思います.

4

1 に答える 1

0

簡単な答えは「OOP」です。

2 番目のケースではcall、コンテキストを提供するために を使用する必要があり、関数が のインスタンスで使用されるというヒントはありませんSomeObject。もちろん、機能は継承されていません。

このような「プライベート」関数の場合、特にコンストラクターでのみ使用される場合は、それほど重要ではありません (その場合、関数は本当に必要ですか?)。ただし、関数をコードの他の部分から使用する必要がある場合は、呼び出しのコンテキストである必要があるオブジェクトに関数を関連付けることで、目的がより明確になります。

于 2013-11-04T12:29:44.110 に答える