Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何检查匿名对象是否有方法?_Javascript - Fatal编程技术网

Javascript 如何检查匿名对象是否有方法?

Javascript 如何检查匿名对象是否有方法?,javascript,Javascript,如何检查创建的匿名对象是否为: var myObj = { prop1: 'no', prop2: function () { return false; } } 是否确实定义了prop2 prop2始终被定义为函数,但对于某些对象,它不是必需的,也不会被定义 我尝试了这里的建议:但我认为它不适用于匿名对象将让您知道函数是否已定义 if(typeof myObj.prop2 === 'function') { alert("It's a function"); } e

如何检查创建的匿名对象是否为:

var myObj = { 
    prop1: 'no',
    prop2: function () { return false; }
}
是否确实定义了prop2

prop2
始终被定义为函数,但对于某些对象,它不是必需的,也不会被定义


我尝试了这里的建议:但我认为它不适用于匿名对象将让您知道函数是否已定义

if(typeof myObj.prop2 === 'function') {
    alert("It's a function");
} else if (typeof myObj.prop2 === 'undefined') {
    alert("It's undefined");
} else {
    alert("It's neither undefined nor a function. It's a " + typeof myObj.prop2);
}

一种方法必须是
如果(typeof myObj.prop1!=“undefined”){…}
你所说的“匿名对象”是什么意思?
myObj
不是匿名的,因为你已经给变量分配了一个对象文本。您只需测试一下:

if (typeof myObj.prop2 === 'function')
{
    // do whatever
}

您需要
hasOwnProperty()

var myObj1={
建议1:‘不’,
prop2:函数(){return false;}
}
var myObj2={
建议1:‘不’
}
console.log(myObj1.hasOwnProperty('prop2'));//返回true
console.log(myObj2.hasOwnProperty('prop2'));//返回false
3个选项
  • typeof myObj.prop2===“function”
    如果属性名称不是动态的/生成的
  • myObj.hasOwnProperty('prop2')
    如果属性名称是动态的,只检查它是否是直接属性(而不是原型链的下游)
  • 如果属性名是动态的,请检查原型链

  • 我知道这是一个老问题,但我很惊讶所有的答案都确保了方法存在,并且它是一个函数,而OP只想检查是否存在。要知道它是一个函数(正如许多人所说),您可以使用:

    typeof myObj.prop2 === 'function'
    
    但您也可以使用以下条件:

    typeof myObj.prop2
    
    甚至:

    myObj.prop2
    
    这是因为函数的计算结果为
    true
    undefined
    的计算结果为
    false
    。因此,如果您知道该成员存在,则它可能只是一个函数,您可以使用:

    if(myObj.prop2) {
      <we have prop2>
    }
    
    if(myObj.prop2){
    }
    
    或者用一种表达方式:

    myObj.prop2 ? <exists computation> : <no prop2 computation>
    
    myObj.prop2?:
    
    JavaScript中匿名对象和非匿名对象之间没有太大区别。如果您在自制对象中放置了dom节点,例如如果
    var my_obj={'node1':document.createElement('div')}然后
    my_obj.node1.hasOwnProperty('cloneNode')
    为false。但是,Sean的解决方案将正确返回true:
    typeof my_obj.node1.cloneNode===“function”
    如果您正在寻找在原型中定义的方法,则将无法工作。@Wilt question指定了匿名对象文字。@artlung是的,您的答案适用于该问题,我只是想把这条评论留给其他可能在其他情况下寻找类似解决方案的人(比如我)。。。不是要取消您的答案的资格。不处理属性已定义但不是函数的情况。如果要使用动态变量检查if(typeof myObj[propoeryStr]=='function'){…}