如何检查匿名函数是否具有 属性?

How can I check if an anonymous function has a property?

我用匿名函数编写了一个 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 属性 'hasOwnProperty' of undefined

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

首先,您在移出第一个值后测试 e[0],因此在最后一次迭代中,您将检查 undefined,因为对于空数组 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
  }
]);