Javascript JS调用的方法不是函数

Javascript JS调用的方法不是函数,javascript,oop,Javascript,Oop,我反对: var devark = { init: function() { var obj = this; obj.assignHandlers(); }, assignHandlers: function() { var obj = this; document.getElementById("menu-toggler").onclick = obj.documentFunctions[0]; }

我反对:

var devark = {
    init: function() {
        var obj = this;
        obj.assignHandlers();
    },
    assignHandlers: function() {
        var obj = this;
        document.getElementById("menu-toggler").onclick = obj.documentFunctions[0];
    },
    documentFunctions: [
        function() {
            toggleClass(this, "opened");
        }
    ]
};
window.load
上,我正在调用
init
方法。这可以正常工作,但当它调用另一个对象方法
assignHandlers
时,会抛出一个错误:

[17:54:33.192]类型错误:obj.assignHandlers不是函数


这是为什么?

就像@Bergi所说的,这是一个
价值问题,可以通过以下方式解决:

window.onload = function () {
    devark.init();
};
两种方法之间的区别是
init
函数中
this
的值。要确定
this
的自然值,请查看方法调用中
的左侧,例如
obj.someFn()。此处
someFn
this
的值将为
obj
。但是,当您执行
window.onload=devark.init,您可以想象该处理程序稍后将像
window.onload()
一样被调用。这意味着
onload
函数中
this
的值,实际上
init
函数将是
window
,而不是
devark

您还可以使用将特定的
值绑定到函数

window.onload = devark.init.bind(devark);

像调用
window.onload=function(){devark.init();}。学习如何工作。在这里工作:@Bergi You rock!!!!!但是错误是什么呢?区别是什么?@tymeJV-bcoz-JSFiddle完全按照Bergi所说调用了对象的方法。查看源代码。@Muhammaddatalhaakbar,我添加了实现相同目标的另一种方法。是的,我看到了;)