gpt4 book ai didi

javascript - 控制台日志记录 "this"返回 "null"

转载 作者:行者123 更新时间:2023-12-03 07:57:33 24 4
gpt4 key购买 nike

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

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

我觉得这很奇怪。这是怎么回事?

我的代码:

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 的调用位置,但是如果通过 call 调用该函数,您的 this 可以为 null (请参阅 here )或 apply,并且您的第一个参数是 null。这也会发生在您的 require.register 回调中:

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

关于javascript - 控制台日志记录 "this"返回 "null",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34738912/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com