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,我添加了实现相同目标的另一种方法。是的,我看到了;)