2016-08-07 5 views
-2
var createworker = function() { 

    var workcount; 
    var input; 
    (function() { 
     workcount = 0; 
     console.log("hello"); 
    }()); 
    var task1 = function() { 
     workcount += 1; 
     console.log("task1" + workcount); 
    }; 
    var task2 = function(a) { 
     workcount += 1; 
     input = a; 
     console.log("task2" + workcount + "variable" + a); 
    }; 
    var task3 = function() { 
     console.log(input); 
    }; 

    return { 
     job1: task1, 
     job2: task2, 
     job3: task3 
    }; 
} 

var worker = new createworker(); 
worker.job1(); 
worker.job2(2); 
worker.job3(); 

var worker1 = createworker(); 
worker1.job1(); 
worker1.job2(2); 
worker1.job3(); 

どちらも同じです。それでは、なぜ新しいものを使うのか、それをいつ使うのですか?javascriptでの新しいキーワードの使用方法

+0

http://stackoverflow.com/a/3658673/2813224 – zer00ne

+0

JavaScriptの「new」キーワードは何ですか?(http://stackoverflow.com/questions/1646698/what-is-the-new-keyword-in-javascript) – JJJ

+0

サイドノート:それはすぐに匿名です'createworker'の先頭にある非表示の関数は無意味です。 –

答えて

2

どちらも同じです。

彼らは両方とも同じ働きをする理由は、あなたがcreateworkerからオブジェクトを返すことです。それはnewの仕事よりも優先されます。

newは、コンストラクタ関数と一緒に使用されます。

  1. コンストラクタ関数のprototypeプロパティポイントが
  2. otのオブジェクトに裏打ちされた新しいオブジェクトを作成し、新しいオブジェクト通常の場合には
  3. 、結果のを参照thisとコンストラクタ関数を呼び出します:これはありませんnew functionnamenewが作成したオブジェクトへの参照です。 ただし、の場合、コンストラクタ関数が非nullオブジェクト参照を返す場合、new式の結果は、の代わりにというオブジェクトになります。これは、あなたのcreateworker例で起こっている "but"です。

createworkerのバージョンでは、書かれているので、newは必要ありません。

それを行うことは絶対に上手です。実際、いつもそうする人がいます。あなたはcreateworkernewを使用したい場合は(大会のコンストラクタ関数によって資産計上されているため、CreateWorkerと改名)、ここではその方法を使用するように設計されたバージョンがあります:

var CreateWorker = function() { 

    var workcount; 
    var input; 
    (function() {    // Side note: This function is pointless. Just move 
     workcount = 0;   // <− this line 
     console.log("hello"); // <− and this one 
    }());      // ...out into the body of `createworker`/`CreateWorker` 

    // Note we assign to properties on `this` 
    this.job1 = function() { 
     workcount += 1; 
     console.log("task1" + workcount); 
    }; 
    this.job2 = function(a) { 
     workcount += 1; 
     input = a; 
     console.log("task2" + workcount + "variable" + a); 
    }; 
    this.job3 = function() { 
     console.log(input); 
    }; 

    // Note we aren't returning anything 
}; 
関連する問題