2017-03-30 5 views
0

JavaScriptの新機能で、以下の2つのメソッドがオブジェクトをインスタンス化できることがわかりました。JavaScriptのコンストラクタメソッドを比較しています

私は両方のコンストラクタから作成されたオブジェクトを見て、それは私と同じように見えます。

しかし、私はこれら2つの方法の違いは何ですか?どのシナリオでどの方法が別の方法より優れているか?

誰でも説明していただけますか?ありがとうございました。

Person1.js

function Person1(name){ 
    this.name = name; 
    this.initialize(); 
} 

Person1.prototype.initialize = function (todoName) { 
    console.log("Initalize function Person 1 class"+this); 
    f1(this); 
} 

function f1(caller) { 
    console.log("F1 Person 1 class"+this); 
    console.log(this); 
    console.log("F1 Person 1 class caller"+caller); 
    console.log(caller); 
} 

Person2.js

var Person2 = (function(){ 

function Person2(name){ 
    this.name = name; 
    this.initialize(); 
} 

Person2.prototype.initialize = function (todoName) { 
    console.log("Initalize function Person 2 class"+this); 
    f1(this); 
} 

function f1(caller) { 
    console.log("F1 Person 2 class"+this); 
    console.log(this); 
    console.log("F1 Person 2 class caller"+caller); 
    console.log(caller); 
} 

return Person2; 
})(); 

このコードでオブジェクトをインスタンス化:

var p1 = new Person1("P1"); 
var p2 = new Person2("P2"); 

console.log("Completed "); 
console.log("P1 "); 
console.log(p1); 
console.log("P2 "); 
console.log(p2); 

答えて

1

Person2は、すぐに表現funciton呼び出さと呼ばれるものに包まれています(またはIIFE) 。最後にはPerson2が返されることに気付くでしょう。そのため、この例の最初の行に代入が機能しています。

この方法を使用する理由は、IIFEでコードをラップするとグローバルスコープがきれいに保たれるということです(つまり、ブラウザでは、windowオブジェクトが多数のグローバルプロパティで煩雑になることはありません) 。

初心者であれば、視覚的に簡単で簡単に追跡できるように、Person1メソッドを使用します。しかし、進歩するにつれて、上記を念頭に置いて、あなたのコードベースの保守性のために最善のものを考えてください。

関連する問題