我正熟悉ES6并在Javascript中为实时项目实现设计模式。我有以下示例代码段,它会抛出一个错误,指出 this 关键字的计算结果为undefined:
export let LifecycleFactoryObj = (() => {
this.myCollection = new WeakSet();
//.... More here
this.add = function (opts) {
let tempObject = new MyCollection(opts);
this.myCollection.add(tempObject);
if (this.myCollection.has(tempObject)) {
return tempObject;
}
return null;
};
})();
引发的错误是:
undefined.lifecycles = new WeakSet(); ^ TypeError:无法设置未定义的属性'lifecycles'
看起来IIFE中的此正在评估 undefined ,但我似乎无法追查原因。我认为当使用让进行变量实例化时,ES6正确地确定了这个关键字的范围。
谢谢!
答案 0 :(得分:1)
this
;您需要使用传统语法(function ClassName
)或新语法(class ClassName
)来创建构造函数,然后调用该构造函数。
在你的情况下,似乎不需要一个完整的类,所以尝试使用普通对象:
export let LifecycleFactoryObj = {
myCollection: new WeakSet(),
//.... More here
add: function(opts) {
let tempObject = new MyCollection(opts);
this.myCollection.add(tempObject);
if (this.myCollection.has(tempObject)) {
return tempObject;
}
return null;
}
};