JavaScript:如何在prototype属性上调用一个函数,从prototype属性中的另一个函数内部调用,所有这些都在一个闭包内?

时间:2015-06-25 21:02:52

标签: javascript scope closures prototype

我希望有人可以帮我弄清楚如何正确地做到这一点,而不仅仅是“让它发挥作用”。

我试图在闭包内使用一个对象,并且有范围问题:

var Why = function() {
    this.foo = 'bar';
}
Why.prototype.explain = function () {
    alert(this.foo);
}
Why.prototype.doIt = function () {
    this.explain();
}

(function() {

    document.addEventListener("DOMContentLoaded", function(event) {
        var why = new Why();
        why.doIt();
    });

})();

我进入控制台:

Uncaught TypeError: this.explain is not a function

我可以用

Why.prototype.explain.call();

但这似乎不对,当我真的这么做时...... this.foo无论如何都是未定义的,因此显然不是正确的做法。

如果我删除自我调用功能,如下...

var Why = function() {
    this.foo = 'bar';
}
Why.prototype.explain = function () {
    console.log(this.foo);
}
Why.prototype.doIt = function () {
    // Why.prototype.explain.call();
    this.explain();
}

// (function() {

    document.addEventListener("DOMContentLoaded", function(event) {
        var why = new Why();
        why.doIt();
    });

// })();

然后它当然有效,但是:

我缺少什么以及在哪里/如何学习?

提前致谢。

1 个答案:

答案 0 :(得分:2)

您的代码被解析为

Why.prototype.doIt = function () { ... }(function() { ... });

您正在调用要分配给原型的函数,然后分配其返回值。由于它返回undefinedWhy.prototype.doIt不存在。

你需要一个分号。