'this'关键字未被function.prototype.call重新分配

时间:2017-05-01 14:12:47

标签: javascript object this

考虑这个模块:

//Adder component
(function init() {

//Initilize variables
const addButton = document.getElementById('add-btn');
const userInput = document.getElementById('user-input');
const userOutput = document.getElementById('user-output');

const App = {
    //Register event handlers
    registerHandlers() {
        addButton.addEventListener('click', function () {
            this.addKeyValue.call(App, userInput.value);
        });
    },

    addKeyValue(input) {
        userOutput.value = input;
    },

};

App.registerHandlers();

})();

当触发click事件时,这会失败,因为this.addKeyValue未定义,因为在该函数的运行时this指的是输入元素而不是App对象。但这不是Function.prototype.call函数的用途吗?为什么我的通话功能没有将此绑定到App?

1 个答案:

答案 0 :(得分:3)

  

但是,呼叫功能的用途是什么?

没有

this.addKeyValue.call将获得this.addKeyValue的值,该值必须是函数,然后调用它。该函数调用中this 的值将是您指定的值。

在调用this函数之前,它不会更改call 的值。您可以使用bind

addButton.addEventListener('click', function () {
    this.addKeyValue(userInput.value);
}.bind(App));