从另一个对象的方法调用对象的原型方法

时间:2015-06-08 14:32:32

标签: javascript

我正在尝试创建一个简单的回调系统,该系统会在按下按钮时触发。它不是回调是工厂函数,而是不同对象的原型方法。我已经开始工作,但我不明白。为什么我需要使用.bind(object)来获取对象来触发它的方法?最初我没有试过绑定,然后绑定(这个),这两个都失败了。

function Bar() {}

Bar.prototype = {
    getStuff: function () {
        return "Hello";
    },

    setStuff: function () {
        console.log( this.getStuff() );
    }
}

function Foo() {
    this.afterSubmit = null;
    var self = this;
    $('button').click(function () {
        self.submit()
    });
    return this;
}

Foo.prototype = {
    submit: function () {
        if (this.afterSubmit !== null) {
            this.afterSubmit();
        }
        $('#msg').append('clicked ');
        return this;
    },

    setAfterSubmit: function (callback) {
        this.afterSubmit = callback;
        return this;
    }
}

var bar = new Bar();
var foo = new Foo().setAfterSubmit(bar.setStuff.bind(bar));
// Why do I need to bind bar ?

请看看我的小提琴 https://jsfiddle.net/j5qfuzna/

1 个答案:

答案 0 :(得分:1)

this.afterSubmit();

这是将上下文设置为Foo实例。将其绑定到Bar实例可以防止这种情况发生。