【问题标题】:Javascript question: Problem with calling an objects methodsJavascript 问题:调用对象方法的问题
【发布时间】:2023-04-09 02:13:01
【问题描述】:

假设我有一个名为FieldEdit 的对象。我为这个对象定义了函数构造函数,通过它实例化它。 var obj = new FieldEdit(),并通过FieldEdit.prototype.<method name> = function() { ... }定义其方法。

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

请注意,如果可以的话,我想避免为此发布代码示例,因为我认为这只是我对 Javascript 理解的一个问题,真的。据我所知,我很确定我的代码是正确的(此外,这里的问题是我的知识)。

【问题讨论】:

    标签: javascript object methods prototype-programming


    【解决方案1】:

    this 在执行FieldEdit 方法期间引用FieldEdit 以外的对象的最可能情况是在嵌套范围内,例如闭包、事件处理程序或任何使用@987654324 显式调用的函数或方法@ 或.apply(someOtherScope, args)

    当然,您可以通过维护对FieldEdit 实例的变量引用并改用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);
    

    【讨论】:

    • 啊。事实上,它发生在我构建的自定义事件处理程序的回调函数中。多么痛苦。
    猜你喜欢
    • 2012-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-24
    • 1970-01-01
    • 2021-10-23
    • 1970-01-01
    相关资源
    最近更新 更多