2009-06-26 6 views
0

なぜこれは問題ではないですか?なぜxxxは関数ではない

aContract = function(){}; 
aContract.prototype = { 
    someFunction: function() { 
     alert('yo'); 
    }, 
    someOtherFunction: some$Other$Function 
}; 

var some$Other$Function = function() { 
    alert('Yo yo yo'); 
}; 

var c = new aContract(); 
c.someFunction(); 
c.someOtherFunction(); 

Firebugのはc.someOtherFunctionが機能

ではありません。しかし、これは、私はここで何をしないのです

aContract = function(){}; 
aContract.prototype = { 
    someFunction: function() { 
     alert('yo'); 
    }, 
    someOtherFunction: some$Other$Function 
}; 

function some$Other$Function() { 
    alert('Yo yo yo'); 
}; 

var c = new aContract(); 
c.someFunction(); 
c.someOtherFunction(); 

だけで正常に動作言います?私は通常、うまく動作する最初のメソッドを使用してjavascriptでコーディングすることを好むが、私はプロトタイプを作成するときに正しく動作していないようです。あなたが実際にsome$Other$Functionを作成する前に、あなたがaContract.prototype.someOtherFunctionsome$Other$Functionを割り当てた

おかげで、サンディEggoで〜CK

答えて

3

。声明の順序は重要です。あなたは物事の順序を切り替えた場合、あなたは良いことでしょう:これはまだ評価されていない

aContract.prototype = { ... } 

:したがって

var some$Other$Function = function() { ... } 

aContract.prototype.someOtherFunctionこれが評価された時点で

var some$Other$Function = function() { 
    alert('Yo yo yo'); 
}; 

aContract = function(){}; 
aContract.prototype = { 
    someFunction: function() { 
     alert('yo'); 
    }, 
    someOtherFunction: some$Other$Function 
}; 
4

undefinedに設定されています。

関数宣言(2番目は最初の式です)が他のステートメントよりも前に評価されるため、2番目の理由が働くのは理由によるものです。 Named function expressions demystified

0

グローバルスコープでは、varは機能ローカルスコープとは異なる動作をしているようです。関数ローカルスコープでは、var - 宣言された変数が関数の先頭に持ち上げられます。つまり、キーワードvarを持つ関数内で宣言された変数は、その関数内の他の場所で利用できます。しかし、グローバルなスコープでは、キーワードfunctionを使用して変数を宣言するだけで、同じ結果が得られる(つまり、キーワードfunctionで宣言された変数は、そのグローバルスコープ内のどこでも使用できます。

+0

全く真実ではありません。 blah()を呼び出すと、 "undefined"と表示されます。function blah(){ alert(x); var x = 5; } –

+0

これはまったく起こりません。例えば。 (function(){var a = x + 1; var x = 2; return a;})()はNaNを返します。あなたはより多くの(function(){var a = function(){return x + 1}; var x = 2; return a()})() 3を返します。 – BaroqueBobcat

1

吊り上げによるものです。関数ステートメントはスコープの先頭に移動されます。

編集:検証クロックフォードのJavaScript:良いパーツページ113

関連する問題