无法调用未定义的方法

Can not call method of undefined

本文关键字:方法 未定义 调用      更新时间:2023-09-26

我正在尝试开发一个用html创建菜单的javascript对象。函数接收一个对象作为参数。在对象元素中,有一个函数应该在从我的对象的方法调用的事件处理程序中执行。

这是我的代码:

Menu = function(config) {
    var j = 0;
    this.config = config;
    this.make = function() {
        for (i = 0; i < this.config.items.length; i++) {
            var vid = document.createElement("div");
            vid.className = this.config.cls;
            vid.id += i;
            document.body.appendChild(vid);
            var txt = document.createTextNode(this.config.items[i]);
            var pp = document.createElement("p");
            pp.appendChild(txt);
            vid.appendChild(pp);
        }
        document.addEventListener("keydown", this.scrolldown, false);
        document.onkeydown = function(e) {
            var keyCode = e.keyCode;
            alert("functional");
            if (keyCode == 40) {
                alert("You hit key down");
                var et = document.getElementById(j);
                this.config.trait1(et);
                j = j + 1;
            } else {
                alert("no");
            }
        }
    };
    return this;
};

当我在实例化对象后调用函数make时,我已经创建了元素,但由于以下原因没有处理事件:

未捕获的类型错误:无法调用未定义的方法"trait1"。

有人能帮我吗?我看到了同一个问题的许多答案,但建议的解决方案都不起作用。

Menu函数中的thisonkeydown函数中的this不同。

this的值存储在另一个变量中并使用它。

Menu = function () {
    var myMenu = this; // I'm assuming that you will be calling `new Menu()`
    document.onkeydown = function () {
        myMenu.config.etc.etc.etc
    }
}