原型对象中“this”的问题

时间:2017-03-03 13:15:25

标签: javascript prototype this

所以我创建了一个基于原型的对象,如:

// 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

1 个答案:

答案 0 :(得分:1)

当您致电converter.outgoingConverter(myObjArray);时,outgoingConverter是对_convertToX的引用。但是,thisconverter!在构造函数中,您可能希望使用this._convertToX.bind(this)强制this