【问题标题】:how to tell if a javascript variable is a function如何判断一个javascript变量是否是一个函数
【发布时间】:2011-08-17 05:36:39
【问题描述】:

我需要遍历 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];
}

【问题讨论】:

标签: javascript typeof


【解决方案1】:

使用typeof operator

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

另外,请注意,您应该确保您正在迭代的属性是该对象的一部分,而不是作为继承链上某个其他对象原型上的公共属性继承的:

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

【讨论】:

  • 只有在属性是本机函数时才可靠。如果它是一个宿主对象,你可以得到任何东西,甚至是一个错误。
  • @RobG 哦? typeof (new XMLHttpRequest).getAllResponseHeaders 在 Safari、Chrome、Firefox 和 Opera 上为我返回 "function"。这是 IE 问题,还是您正在考虑不同的主机对象或方法? (不是我怀疑你,我只是在寻找一个例子。)
【解决方案2】:

我认为以下内容可能对您有用。

How can I check if a javascript variable is function type?

顺便说一句,我正在使用以下功能来检查功能。

    // 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

【讨论】:

  • 虽然不太可能,但请注意,如果您正在测试来自另一个窗口框架的函数值(因为每个框架都有自己的 Function 根),这将失败。
【解决方案3】:

您可以使用以下解决方案来检查 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];
}

【讨论】:

  • 考虑打电话提供一点书面解释,除了 // Like so!评论。也许在您的代码前加上“使用 typeof 运算符来确定属性值的类型”的建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-02
  • 1970-01-01
  • 2019-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-05
相关资源
最近更新 更多