我希望有人可以帮我弄清楚如何正确地做到这一点,而不仅仅是“让它发挥作用”。
我试图在闭包内使用一个对象,并且有范围问题:
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();
});
// })();
然后它当然有效,但是:
我缺少什么以及在哪里/如何学习?
提前致谢。
答案 0 :(得分:2)
您的代码被解析为
Why.prototype.doIt = function () { ... }(function() { ... });
您正在调用要分配给原型的函数,然后分配其返回值。由于它返回undefined
,Why.prototype.doIt
不存在。
你需要一个分号。