0
这是我的代码:为什么我的Javascript对象成员在构造函数之前被初始化为onThen?
SLVD.promise = function() {
delete this.data;
delete this.callBack;
delete this.babyPromise;
};
SLVD.promise.prototype.then = function(callBack) {
if(this.data) {
return callBack(this.data);
}
else {
this.callBack = callBack;
this.babyPromise = new SLVD.promise();
return this.babyPromise;
}
};
SLVD.promise.prototype.resolve = function(data) {
if(this.callBack) {
var tPromise = this.callBack(data);
if(this.babyPromise) {
if(!(tPromise instanceof SLVD.promise)) {
this.babyPromise.resolve(tPromise);
}
else if(tPromise.data) {
this.babyPromise.resolve(tPromise.data);
}
else {
tPromise.callBack = this.babyPromise.callBack;
if(this.babyPromise.babyPromise) {
tPromise.babyPromise = this.babyPromise.babyPromise;
}
}
}
}
else {
this.data = data;
}
};
SLVD.promise.as = function(data) {
var promise = new SLVD.promise();
promise.resolve(data);
return promise;
};
这是一个承诺制度。 (是的,我知道那里已经有承诺系统了,请不要在这方面搞砸我。)但是,当构造函数运行时,成员callBack已经设置为“onThen(value)”。当我尝试在构造函数中删除它时,它仍然如此。有人对这个有了解吗?
其他潜在有用的信息:
- 构造函数的调用是新SLVD.promise();
- 我给出了整个类的定义。没有继承,我没有其他隐藏的原型属性。
- 我已经在记事本++中的文件中进行搜索,我绝对没有使用过这个名字。
- 我在Firefox中运行这个。
- 我试着将callBack重命名为奇怪的事情,以防万一它是一个保留字的种类,但它没有帮助。
此图像显示的代码在暂停后我调用构造函数删除线调试器...
编辑:对于这个问题,this.babyPromise也预定义...(即使在删除之后)。为什么?
不要使用删除,它会减慢一切。而是将值更改为null或0或空字符串或任何falsey。 – colecmc
虽然这不是问题。在构造函数调用中不应该预先定义任何东西。 – nyttimangus
请告诉我们您如何调用此代码以及如何使用它,因为这可能是理解您的问题的关键。例如,你总是创建一个新的对象,或者你在重复使用同一个对象吗? – jfriend00