我有一个对象数组,包含对我的类函数的引用(通过
这是一个关于IT技术的网站,提供了PLNKR服务,该服务可以帮助开发人员进行代码编辑和调试。如果您需要使用该服务,请点击上面的链接。
.bind()
方法绑定)。当我直接访问它们,比如array[3].myFunction
时,一切都正常。但是当我尝试通过迭代数组来访问这些函数时,出现了奇怪的行为。我已经尝试过使用Array.forEach()
、for-in、for-of和Array.map()
函数,但结果总是相同的——我得到了第一个函数四次。我在这里做错了什么?谢谢。
var Container = function() {
this.function1 = function() {
console.log('function 1 invoked');
};
this.function2 = function() {
console.log('function 2 invoked');
};
this.function3 = function() {
console.log('function 3 invoked');
};
this.function4 = function() {
console.log('function 4 invoked');
};
this.array = [
{ key: '1', myFunction: this.function1.bind(this) },
{ key: '2', myFunction: this.function2.bind(this) },
{ key: '3', myFunction: this.function3.bind(this) },
{ key: '4', myFunction: this.function4.bind(this) },
];
};
var container = new Container();
// Just printing the results below
console.log('direct access:');
console.log(container.array[3].myFunction);
console.log('forEach:');
container.array.forEach(el => {
console.log(el.myFunction);
});
console.log('for in:');
for (let i in container.array) {
console.log(container.array[i].myFunction);
}
console.log('map:')
container.array.map(el => {
console.log(el.myFunction);
});
function () { [native code] }
(一个绑定的函数对象)。无法将其与其他函数区分开来。 - BergitoString()
存在一个 bug,至少在我的 Chrome 版本中是如此。你可能需要指出,在 Chrome 中,它每次都会显示function1
的函数体。 - Jacob