所以我创建了一个基于原型的对象,如:
// constructor
const MyFactory = function () {
this._myProperty = {
MyType1: '...',
MyType2: '...'
};
this._converters = [{
name: 'X'
outgoingConverter: this._convertToX
},
{
name: 'Y'
outgoingConverter: this._convertToY
}];
// ...
}
MyFactory.prototype._convertToX = function (myObjArray) {
console.log(this._myProperty); // undefined
const convertedObjArray = _.map(myObjArray, (obj) => {
console.log(this._myProperty); // undefined
const MyObject = this._myProperty[obj.type]; // throws error
return MyObject ? new MyObject() : undefined;
});
//...
};
MyFactory.prototype._dispatch = function (myObjArray) {
_.forEach(this._converters, (converter) => {
converter.outgoingConverter(myObjArray);
});
};
// somewhere in this code I am calling this._dispatch(someObjArray)
我正在尝试从this._myProperty
函数中访问.map()
,但我得到了:
TypeError:无法读取未定义
的属性“MyType1”
我认为代码中的this context
有问题
根据我的理解ES6 arrow functions保留this
的封闭背景,所以我不明白什么是错的。
问题:
为什么我的this._myProperty
函数中_convertToX
未定义?
如何从那里访问_myProperty
?
答案 0 :(得分:1)
当您致电converter.outgoingConverter(myObjArray);
时,outgoingConverter
是对_convertToX
的引用。但是,this
是converter
!在构造函数中,您可能希望使用this._convertToX.bind(this)
强制this
。