web-dev-qa-db-ja.com

JavaScript変数が関数かどうかを確認する方法

JavaScriptオブジェクトのプロパティをループする必要があります。プロパティが関数なのか単なる値なのかはどうすればわかりますか?

var model =
{
    propertyA: 123,
    propertyB: function () { return 456; }
};

for (var property in model)
{
    var value;
    if(model[property] is function) //how can I tell if it is a function???
        value = model[property]();
    else 
        value = model[property];
}
27
Mr Bell

typeof演算子 を使用します。

if (typeof model[property] == 'function') ...

また、反復しているプロパティがこのオブジェクトの一部であり、継承チェーン上の他のオブジェクトのプロトタイプのパブリックプロパティとして継承されていないことを確認してください:

for (var property in model){
  if (!model.hasOwnProperty(property)) continue;
  ...
}
50
Phrogz

以下はあなたに役立つかもしれないと思います。

JavaScript変数が関数型かどうかを確認するにはどうすればよいですか?

ところで、私は機能をチェックするために以下を使用しています。

    // Test data
    var f1 = function () { alert("test"); }
    var o1 = { Name: "Object_1" };
    F_est = function () { };
    var o2 = new F_est();

    // Results
    alert(f1 instanceof Function); // true
    alert(o1 instanceof Function); // false
    alert(o2 instanceof Function); // false
4
Kashyap

次のソリューションを使用して、JavaScript変数が関数であるかどうかを確認できます。

var model =
{
    propertyA: 123,
    propertyB: function () { return 456; }
};

for (var property in model)
{
    var value;
    if(typeof model[property] == 'function') // Like so!
    else 
        value = model[property];
}
0
Rintala