javascript - 如何检查匿名函数是否具有属性?
问题描述
我用匿名函数编写了一个 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
我想阅读并检查数组参数中的匿名函数是否具有属性。
解决方案
首先,您e[0]
在将第一个值移出之后进行测试,因此在最后一次迭代中,您将检查undefined
since 是否有一个空数组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
}
]);
推荐阅读
- ansible - 在 ansible 上使用 jinja 循环在变量中设置接口名称
- asp.net-core - 使用带有 .Net Core WebApi 的 Blazor 进行 Windows 身份验证
- php - Codeigniter - 使用 dompdf 生成的 pdf 不符合 html 格式
- static - nuxt 生成有效载荷 undefined
- python - 如何在保持相对顺序的同时有效地打乱 numpy 数组的某些值?
- java - 如何使用 Stream API 比较具有不同值的两个地图?
- r - 合并列名上的 2、1 行 data.tables
- php - 如何将 PHP 上的前 10 个预选值设置为多个选择标签
- javascript - 如何将以下代码放在 React JS 中头盔的脚本标记中?
- android-studio - 为什么Relativelayout 不适用于片段?