代码之家  ›  专栏  ›  技术社区  ›  Daddy Warbox

Javascript问题:调用对象方法时出现问题

  •  1
  • Daddy Warbox  · 技术社区  · 15 年前

    假设我有一个叫做 FieldEdit var obj = new FieldEdit() ,并通过 FieldEdit.prototype.<method name> = function() { ... } .

    在什么情况下,在对象的其他方法中调用此对象的方法(通过。 this.<method name>();

    请注意,如果可以的话,我希望避免为此发布代码示例,因为我认为这只是我对Javascript理解的一个问题。就我所知,我非常确信我的代码是可靠的(此外,这里的问题是我的知识)。

    1 回复  |  直到 13 年前
        1
  •  2
  •   eyelidlessness    15 年前

    最可能的情况是 this FieldEdit 在执行 现场编辑 方法位于嵌套范围内,如闭包、事件处理程序或使用显式调用的任何函数或方法 .call(someOtherScope) .apply(someOtherScope, args)

    当然,您可以通过维护对 现场编辑 实例与使用 FieldEditInstance.<method>() 相反。

    PrototypeJS允许您使用 Function.bind

    var FieldEditInstance = this;
    obj.methodThatUsesACallback(function() {
        // use that instead of this
    });
    

    var FieldEditInstance = this;
    var callback = function() {
        // ...
    };
    // This is more or less what PrototypeJS' Function.bind produces
    var boundCallback = function() {
        return callback.apply(FieldEditInstance, arguments);
    };
    obj.methodThatUsesACallback(boundCallback);