两个都。
首先,您的 load 函数不是任何 this 的成员/属性,就像您对其进行编码的方式一样。您的 load 函数只是存在于您的 option 函数中的嵌套函数,正如在其他响应中隐含地指出的那样。
在你的选项函数中,如果你想让 'load' 成为 'this' 的成员,你需要这样说,像这样:
function option(){
this.load = function(){}; // now load is actually a property of whatever this is
}
其次,您和其他发帖人是正确的,当您的匿名函数被调用时,“this”不再是相同的“this”。
每当您调用一个函数时,都会创建一个全新的“this”并存在于该函数的范围内。如果你只是调用这样的函数:
transition_opacity(args);
.. 然后在transition_opacity 中,“this”只是指窗口对象,或者可能是window.document。要让“this”引用除 window 或 window.document 以外的任何内容,您需要(实际上)执行以下操作之一:
myObject.transition_opacity(args);
transition_opacity.call(myObject, arg1, arg2, ..);
transition_opacity.apply(myObject, argArray);
或者
var myObject = new transition_opacity(args);
在每一种情况下,在transition_opacity 中,“this”都指代myObject(或者,在最后一种情况下,它指的是正在创建并分配给myObject 的新对象)。
这是一种执行您正在尝试执行的操作的方法:
var MyNamespace = {
option: function(room,slot){
var div_id = document.getElementById(room);
var opacity = window.getComputedStyle(div_id).opacity;
var _this = this;
transition_opacity(div_id,opacity,0,function(){
// Careful! Inside here, 'this' is just window or window.document,
// unless transition_opacity sets it to something using call or apply,
// in which case that 'this' is probably not the 'this' you want.
// So carefully refer to the saved instance of 'this':
_this.load();
});
},
load: function(){
console.log('test'); // now it should happen
}
}
.
.
MyNamespace.option(room, slot); // inside option, 'this' is MyNamespace.
这是另一种方法:
function MyClass(){};
MyClass.prototype = {
// all the same stuff that is in MyNamespace above..
};
.
.
var myObject = new MyClass();
myObject.option(room, slot);
清如泥?