2017-06-07 16 views
0

以下のような機能があります。 私の問題は、関数内にfunction b()を印刷する必要があることです。ここではfunction a()が親関数です。私はc= new a()console.log(b())を取ってそれをしました。私は期待通りに正しい価値を持っています。しかし親関数の中にはtest()という別の関数があり、同じ名前で親関数の外に別の関数があります。 function b()を印刷した後、function test()に電話します。しかし、それは親関数から値を返します。外的機能にあるneeded answerというアラートを取得する必要があります。関数名を変更せずに期待通りの結果を得る方法はありますか?両方の機能test()が必要です。javascriptと同じ関数名(入れ子関数と外部関数)

期待される結果:= 2 function b()function test() =必要な答え

現在の結果:= 2 function b()function test() = 4

すべてのヘルプは理解されるであろう。ありがとうございました。

function a() { 
 
\t var val = 1; 
 
\t var otherval = 2; 
 
\t 
 
     b = function() { 
 
\t return val + 1; 
 
     } 
 
    
 
     test = function() { 
 
      qwerty = otherval + b(); 
 
      alert(qwerty); 
 
     } 
 

 
    return 'OK'; 
 
} 
 
\t 
 
function test(){ 
 
    alert('needed answer'); 
 
} 
 
\t \t 
 
c = new a(); 
 
console.log(b()); //return 2 
 
test(); //alert 4 but I needed alert needed answer

+3

あなたはvar' 'なしで変数を宣言するとき、彼らはグローバルスコープの一部になります。それを変更して動作します – Rajesh

+0

コードフォーマットを修正してください –

答えて

2

はラジェッシュはグローバル変数になりますvarを使用せずに関数を宣言、指摘したように。テスト関数の前にvarを使用して期待値を取得します。しかし、これは機能の外にアクセスできないようにしますa()。そのためには、関数をthisオブジェクトに割り当て、次に示すようにアクセスします。

function a() { 
 
\t var val = 1; 
 
\t var otherval = 2; 
 
    this.b = function() { //prepend this 
 
\t  return val + 1; 
 
    } 
 
    this.test = function() { //prepend this 
 
     qwerty = otherval + b(); 
 
     alert(qwerty); 
 
    } 
 
    return 'OK'; 
 
} 
 
\t 
 
function test(){ 
 
\t alert('needed answer'); 
 
} 
 
\t \t 
 
c = new a(); 
 
console.log(c.b()); //return 2 
 
test(); //alert 4

+0

クレジットのための最初のありがとう。今度は1つの問題を修正しましたが、「b」を残しました。それはエラー(*あなたの以前の編集で*)をスローする必要があります。第二に、唯一の問題が 'var'を欠いているならば、これは誤植であり、**それは閉じられ、答えられてはいけません。 – Rajesh

+0

@Rajesh今それは良いはずですか?関数 'b'をアクセス可能にするために、' a'に代入する必要がありますか? – Saksham

+0

@Rajesh私たちはすべてここにいるので、皆さんの詳細なコメントをご覧になりたいです。 – Saksham

1

あなたはあなたのコードに若干の変更を必要としています。これを行うと、それはあなたの要件ごとに動作します -

function a() { 
 
\t var val = 1; 
 
\t var otherval = 2; 
 
\t 
 
    b = function() { 
 
\t return val + 1; 
 
} 
 
    
 
    this.test = function() { 
 
\t \t qwerty = otherval + b(); 
 
    alert(qwerty); 
 
} 
 
    return 'OK'; 
 
} 
 
\t 
 
function test(){ 
 
\t alert('needed answer'); 
 
} 
 
\t \t 
 
c = new a(); 
 
alert(this.b()); //return 2 
 
test(); //alert 4

関連する問題