在JavaScript中,函数是第一类对象,这意味着您可以像处理任何对象一样处理它们,在这种情况下,您只是向函数对象添加属性。
好吧,让我们为函数添加一些属性。
function a() {
a.firstProp = "I'm 1st - property";
}
a.seccondProp = "I'm 2st - property";
function b() {
a();
}
b(); // initialize 1st property (firstProp) for `function a`;
console.log( Object.getOwnPropertyNames(b) );
console.log( Object.getOwnPropertyNames(a) );
如何在Chrome DevTools中看到我在代码示例中添加到函数中的键值对?
Console.log( Object.keys(a) );
您可以使用Object.assign
将自己的可枚举属性复制到空对象并查看。
或者使用Object.entries
。
function a() {
a.firstProp = "I'm 1st - property";
}
a.seccondProp = "I'm 2st - property";
function b() {
a();
}
b(); // initialize 1st prop;
console.log(Object.assign({}, a));
console.log(Object.entries(a));
您正在添加可枚举属性firstProp
和secondProp
。要获得这些属性,通常使用Object.keys方法:
function a() {
a.firstProp = "I'm 1st - property";
}
a()
a.seccondProp = "I'm 2st - property";
console.log(Object.keys(a))
其他方式更短更优越,但您可能也对for循环感兴趣。对于所有属性的in循环,如下所示:
function foo (){}
foo.bar = 'test';
foo.baz = 123;
for(let i in foo) {
console.log(i);
}
console.log('------------');
for(let i of foo) {
console.log(i);
}
另请注意,for in循环遍历对象的所有属性。如果对象是可迭代的(例如数组),for循环仅在对象上循环,这就是为什么这会产生一个数组。
希望你觉得这很有帮助。