考虑这个模块:
//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?
答案 0 :(得分:3)
但是,呼叫功能的用途是什么?
没有
this.addKeyValue.call
将获得this.addKeyValue
的值,该值必须是函数,然后调用它。该函数调用中this
的值将是您指定的值。
在调用this
函数之前,它不会更改call
的值。您可以使用bind
。
addButton.addEventListener('click', function () {
this.addKeyValue(userInput.value);
}.bind(App));