2017-11-15 17 views
0

私はこの質問で混乱しています。JavaScript MDNでも私のための概念を明確にしていません。関数内で作成されたオブジェクト内のメソッドを呼び出す

invokeMethodという関数があり、その関数ではObjectを作成する必要があります。オブジェクトにはメソッドが含まれています。私はブラケット記法を使用してオブジェクト内のメソッドを呼び出す必要がありますが、何も返す必要はありません。

ここに質問と私のコードです。関数のかっこでメソッドを呼び出そうとすると、エラーメッセージが表示され続けます。

質問:メソッドはオブジェクト上のメソッドの名前を含む文字列です ブラケット表記を使用してこのメ​​ソッドを呼び出します。 何も返す必要はありません。

入力例:

{ foo: function() {} }, 'foo' 

マイコード:

function invokeMethod(object, method) { 
    // code here 
    const obj = { 
    name: 'kung', 
    foo: function(){ 
     console.log('foo'); 
    } 
    }; 
} 

invokeMethod(obj[foo]); 
+1

; '変数 'obj'は何ですか、変数' foo'は何ですか?あなたの 'invokeMethod'関数には2つの引数があります。あなたは1つを使って呼び出しますが、どちらのコードでも引数のどちらも使用していないので、実際には問題になりません。 –

答えて

1

このヘルプを確認してください。

function invokeMethod(object, method) { 
 
    // object definitions 
 
    const obj = { 
 
    name: 'kung', 
 
    foo: function(){ 
 
     console.log('foo'); 
 
    } 
 
    }; 
 

 
    // conditional invokation 
 
    switch(object){ 
 
    case "obj": 
 
     if(typeof obj[method] == "function") return obj[method](); 
 
    default: 
 
     console.log("Given object not found!"); 
 
    } 
 
} 
 
// call method 
 
invokeMethod("obj", "foo");

***オブジェクト自体がパラメータとして渡される場合:

'は、invokeMethod(OBJ [FOO])で

function invokeMethod(object, method) { 
 
\t if(typeof object[method] === "function") \t 
 
\t \t object[method](); 
 
\t else 
 
\t \t console.log('Invalid function name!'); 
 
    } 
 
    
 
    invokeMethod({ foo: function() {console.log('foo');} }, 'foo');

+0

ここでオブジェクトに直接アクセスできなくなり、invokeMethod()を使用してオブジェクトを呼び出すことができます。 –

+0

私はここで何かを変える必要があると思います。もちろん、クエリは機能しますが、リアルタイム実行では、オブジェクトにobjを渡してその関数を調べる必要があります。あなたのコードが見れば、オブジェクト引数ではなくobj constの中で関数を常に返しています。 –

+0

はい@KenrySanchez、私はそれを指摘してくれてありがとう、その部分を逃したと思います。私は私の答えを更新しました。乾杯。 –

0

多分これは役立つかもしれません。

あなたの関数を見てください私はあなたが引数として2つの要素objectmethodを持っていることがわかります。だから、あなたの関数は、それはあなたがobj-functionを受信しようとしているならば、あなたは今、ちょうどこの、

function invokeMethod(method) 

を持っている必要があり、この

function invokeMethod(object, method) { 
    // code here 
    const obj = { 
    name: 'kung', 
    foo: function(){ 
     console.log('foo'); 
    } 
    }; 
} 

をやって悪いですが、あなたの例に続いて、私はと思うするつもりですあなたは本当にobj-functionを受け取りたいと思っています。したがって、その場合は、これを行う必要があります。

const obj = { 
    name: 'kung', 
    foo: function(){ 
     console.log('foo'); 
    } 
    }; 

function invokeMethod(obj, method) { 
    if((method in obj) && typeof obj[method] ==="function"){ 

    return obj[method](); 
    } 
} 

invokeMethod(obj, 'foo'); 
+0

うまくいきました!このソリューションにどのように到達できたかを説明してください/明白になりますか?特にIF声明? Javascriptを自分で学習しているので、それは本当に私の理解に役立ちます。コースの – babycoder

+0

。オブジェクトのメソッドを探しているので、クエリを実行する必要があります。この問合せは単純で、そのためにif文を使用します。 'if'に'(method in obj) 'と' typeof obj [method] === "function"の2つの操作があります。 'in'演算子は、オブジェクトについての知識のために使用されます。この場合はメソッドです。 'typeof'は、typeプロパティに関する知識のために使われます。型を文字列として返すので、型が 'function'かどうかを知る必要があります。最後のステップは、あなたが探している関数をブラケット表記で返すことです。 –

関連する問題