控制台日志记录“;这个“;返回“;空”;

Console logging "this" returns "null"

本文关键字:返回 控制台 记录 日志 这个      更新时间:2023-09-26

我正试图为我正在构建的React应用程序创建一个流量存储。我正在使用一个对象分配polyfill-npm包和Facebook的Flux库。

最初,我在引用var currIds = this._data.map(function(m){return m.id;});的控制台中收到错误"无法读取null的属性'_data'"。该方法是目前唯一直接调用的方法。然后我执行了返回"null"的console.log(this)

我觉得这很奇怪。发生了什么事?

我的代码:

var Assign = require('object-assign');
var EventEmitterProto = require('events').EventEmitter.prototype;
var CHANGE_EVENT = 'CHANGE';
var StoreMethods = {
init: function() {},
set: function (arr) {
console.log(this);
    var currIds = this._data.map(function(m){return m.id;});
    arr.filter(function (item){
      return currIds.indexOf(item.id) === -1;
    }).forEach(this.add.bind(this));
},
add: function(item){
  console.log(this);
    this._data.push(item);
},
all: function() {
    return this._data;
},
get: function(id){
   return this._data.filter(function(item){
       return item.cid === id;
   })[0];
},
addChangeListener: function(fn) {
    this.on(CHANGE_EVENT, fn);
},
removeChangeListener: function(fn) {
    this.removeListener(CHANGE_EVENT, fn);
 },
 emitChange: function() {
    this.emit(CHANGE_EVENT);
 },
 bind: function(actionType, actionFn) {
    if(this.actions[actionType]){
        this.actions[actionType].push(actionFn);
    } else {
        this.actions[actionType] = [actionFn];
    }
}
};
exports.extend = function(methods) {
var store = {
_data: [],
actions: {}
};
Assign(store, EventEmitterProto, StoreMethods, methods);
store.init();
require('../dispatcher').register(function(action){
   if(store.actions[action.actionType]){
       store.actions[action.actionType].forEach(function(fn){
        fn.call(null, action.data);
       })   
   }
  });
  return store;
 };

在调用set的情况下,我不能使用see,但是如果函数是通过call(请参阅此处)或apply调用的,则您的this可以是null,并且您的第一个参数是null。这也发生在您的require.register回调中:

fn.call(null, action.data) //First parameter is your 'this'.