我正在建立一个菜单模块。 在第一个文件slideout.js中,我创建了一个对象,该对象具有一个原型,其方法是切换,打开和关闭。
在第二个文件中,我尝试使用该菜单模块通过jquery事件处理程序访问其原型上的方法。
问题是,"这个"在menu.toggle中现在将引用jquery对象而不是对象。我理解这一切。
我的问题是,解决这个问题的最佳方法是什么?
它在执行menu.toggle.bind(menu)
时有效,但这似乎是错误的。我也可以通过创建一个匿名函数,然后调用menu.toggle来解决它。但这似乎同样错了。
我的直觉说,我应该在slideout.js中解决这个问题。
slideout.js
'use strict';
var proto = {
isOpen: false,
toggle: function() {
return this.isOpen ? this.close() : this.open();
},
open: function() {
this.isOpen = true;
return this;
},
close: function() {
this.isOpen = false;
return this;
}
};
module.exports = function(options) {
var obj = Object.create(proto);
return obj;
};
main.js
'use strict';
var slideout = require('./slideout'),
$ = global.jQuery;
module.exports = function() {
var menu = slideout();
$('.js-main-menu-trigger').on('click', menu.toggle);
};