Javascript类-调用函数时未定义不是函数

标签 javascript class oop iife

我正在尝试用 javascript 进行面向对象编程。执行此操作有多种变体。

我在一些 AnglularJS 示例中看到了一些我认为是最清晰的示例。

可悲的是我越来越

undefined is not a function

调用我的实例的函数时

var MyChooser = (function () {

    var self = this;
    var constructor = function (selectBox, previewBox) {
        this.selectBox = selectBox;
        this.previewBox = previewBox;
        this.selectBox.change(function () {
            alert(this.value);
        })
    };

    MyChooser.prototype.loadFrames = function () {
        alert("load");
        $.ajax({url: "api.php"}).done(function (data) {
            alert(data);
            //self.frames = data;
        })
    };

    MyChooser.prototype.displayFrame = function (frame) {
        this.previewBox.setAttribute("src", frame.src);
    };

    MyChooser.prototype.invalidateSelectBox = function () {

    };

    return constructor;
});



 var fp = new MyChooser(document.getElementById("frame-select"), document.getElementById("frame-preview"));
            fp.loadFrames();

为什么我会收到此错误?

(我还删除了 jquery 调用,但这不是问题)

最佳答案

最后缺少一个 () 来使封闭函数成为 IIFE。

var MyChooser = (function () {

  var constructor = function(select,...stuff){...}

  // Note we're using constructor.prototype rather than MyChooser.prototype
  constructor.prototype.foo = function...
  ...

  return constructor;
}()); // Note the ()

没有它,您的构造函数将不会被分配/返回到MyChooser。最终,MyChooser 是一个返回构造函数 的函数,而不是构造函数 本身。另外,将原型(prototype)方法更改为指向 constructor 而不是 MyChooser

此外,所有这些困惑都是由于构造函数及其方法定义被放置在闭包中这一事实造成的 - 这是不必要的。您可以简单地选择:

function MyChooser(select,...stuff){...}
MyChooser.prototype.moarStuff = function(){...};

...

var fp = new MyChooser(...);

关于Javascript类-调用函数时未定义不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28928434/

相关文章:

javascript - 对 globalCompositeOperation 感到困惑

javascript - 如何使用 Ecmascript 6 类扩展对象字面量类

javascript - 如何正确检查两个条件?

javascript - Grunt 不再实时重载

Java 对象为计算变量返回零

python - 将父类的自身更改为子类

iphone - 在 iPhone 应用中使用声音 - 添加 Action 和分组按钮

javascript - 静态 foo = "bar"与 MyClass.foo = "bar"

javascript - 如何在 Javascript 中检查对象是否为 "sub-object"?

python - 在关系数据库中用 "multiple inheritance"表示层次关系