2016-11-06 24 views
-2

これは完全な無意味なコードであることを私は知っています。私はすでに書いて手元にあったコードで無名関数を試しています。なぜ配列が返ってこないのか分かりません。なぜこの無名関数は返されませんか?

(function() { 
    function Employee(name, age, pay) { 
     this.name = name; 
     this.age = age; 
     this.pay = pay || 800; 
    } 

    function Manager(name, age, pay) { 
     Employee.call(this, name, age, pay); 
     this.reports = []; 
    } 
    Manager.prototype = Object.create(Employee.prototype); 
    Manager.prototype.addReport = function(report) { 
     this.reports.push(report); 
    } 

    function Cashier(name, age, pay) { 
     Employee.call(this, name, age, pay); 
    } 
    Cashier.prototype = Object.create(Employee.prototype); 
    var ary = [Cashier, Manager]; 
    return ary; 
}()); 
+1

、一貫して読み取り可能にコードをフォーマットする時間を取ることは、あなたが答えを得るのに役立ちます。 *(今回はあなたのためにやったことがあります)* –

+2

配列は_戻ります。 – thgaskell

+0

@ T.J.Crowderに完全に同意します。さて、_Anonymous_関数を呼び出すことはできません。だから、彼らが何かを返すかどうかを正確にチェックしているところ。また、私は匿名関数を使う必要があるのだろうかと思います。私にとっては、関数を定義する標準的な方法があると、コードレビューはずっと簡単です。これと同等のものは、名前付き関数を定義し、それが定義された直後に呼び出すことです。それははっきりしていないのですか? – FDavidov

答えて

1

...なぜ配列が戻っていないですか?

です。あなたはその戻り値で何もしていないだけです。

var result = (function() { // **** 
 
    function Employee(name, age, pay) { 
 
     this.name = name; 
 
     this.age = age; 
 
     this.pay = pay || 800; 
 
    } 
 

 
    function Manager(name, age, pay) { 
 
     Employee.call(this, name, age, pay); 
 
     this.reports = []; 
 
    } 
 
    Manager.prototype = Object.create(Employee.prototype); 
 
    Manager.prototype.addReport = function(report) { 
 
     this.reports.push(report); 
 
    } 
 

 
    function Cashier(name, age, pay) { 
 
     Employee.call(this, name, age, pay); 
 
    } 
 
    Cashier.prototype = Object.create(Employee.prototype); 
 
    var ary = [Cashier, Manager]; 
 
    return ary; 
 
}()); 
 
console.log(result);

+0

大丈夫、私はあなたが返されたスコープからアクセス可能な関数からオブジェクトを返すような印象を受けていたので、 'ary'をタイプしてグローバルなようにコンソールからaryオブジェクトにアクセスすると思っていました。私はそれが間違っていると仮定していますか? – Brandon

+0

@Brandon:はい、 'ary'(変数)は、無名関数内のコードからのみアクセス可能です。これは、上記の無名関数の*目的*です。あなたが返すことによってアクセス可能にすることを除いて、内部のものを非公開にすること。それが参照する配列はアクセス可能ですが、匿名関数が返す値を利用する場合にのみアクセス可能です。 –

1

実は、このコードは、2つのコンストラクタ関数オブジェクトを返している:最初の行に***コメントを参照してください。あなたのコンソール上でそれを実行してみてください: - 助けを求めた場合

enter image description here

+1

スナップショットを追加する代わりに、スタックスニペットにOPコードをコピーしただけでも構いません。 – Rajesh

+0

ええ、申し訳ありませんが、私はそれを言っておく必要があるオブジェクトを見た、それは私が混乱している理由の一つです。コンソールにobjと入力すると、objは 'undefined'と表示されますか? – Brandon

関連する問題