首页 > 解决方案 > 如何检查匿名函数是否具有属性?

问题描述

我用匿名函数编写了一个 JavaScript 并有一个属性:


!function(e) {
    for(;e.length;){
        e.shift()();
        console.log(e[0].hasOwnProperty('a');
    }
}

([(function(){
    this.a = function(){
        console.log("hello");
    }
}),
function(){
    //no property here
}]);

e[0].hasOwnProperty('a')打印到控制台时出现错误

它说::::Uncaught TypeError: Cannot read property 'hasOwnProperty' of undefined

我想阅读并检查数组参数中的匿名函数是否具有属性。

标签: javascriptobjectpropertiesanonymous-function

解决方案


首先,您e[0]在将第一个值移出之后进行测试,因此在最后一次迭代中,您将检查undefinedsince 是否有一个空数组e[0] === undefined

其次,this.a = value不向函数添加属性-除非该函数像这样使用new fn()-然后生成的对象将具有一个名为a

你可以

! function(e) {
  for (; e.length;) {
    const fn = e.shift();
    var o = new fn();
    console.log(o.hasOwnProperty('a'));
  }
}([function() {
    this.a = function() {
      console.log("hello");
    };
  },
  function() {
    //no property here
  }
]);

或者,您可以定义第一个函数,例如

(() => {
  const fn = function() { }; 
  fn.a = function(){ 
    console.log("hello"); 
  }; 
  return fn; 
})()

这将使您的代码

! function(e) {
  for (; e.length;) {
    const fn = e.shift();
    //fn(); // you don't actually need to run it
    console.log(fn.hasOwnProperty('a'));
  }
}([(() => {
    const fn = function() {};
    fn.a = function() {
      console.log("hello");
    };
    return fn;
  })(),
  function() {
    //no property here
  }
]);


推荐阅读