>JQuery 如何处理"无法设置未定义的属性 xxx"问题?"如果我有:
function Foo() {
Foo.fn = Foo.prototype;
}
然后我有一个扩展JavaScript文件,其中包含以下代码:
(function(foo) {
foo.fn.myPlugin = function() {
//return something here
};
})(Foo);
我收到一个错误,说"无法设置未定义的属性 myPlugin"。有趣的是,如果我只是将插件代码复制到FireBug或Chrome中并在控制台中执行它,它工作正常,并按预期附加和工作,如下所示:
foo.myPlugin();
我猜我的问题要么来自浏览器加载文档的时间,要么来自我现有的对象不在它自己的命名空间内的事实。我想知道这是否仅在您使用 var 语法定义类时才有效?
我不知道。。。据我了解...两者都应该有效。
function Baz() {
return this;
}
Baz.prototype.fn = Baz.prototype;
var Foo = new Baz();
Baz = null;
(function(Bar) {
Bar.fn.myPlugin = function() {
return "test";
};
})(Foo);
Foo.myPlugin(); //returns test
这有效,并使 Baz 可分配。 不确定jQuery是否就是这样做的。
我所知,你从不执行这一行:
Foo.fn = Foo.prototype;
在您的Foo()
函数中。
函数仅在调用它们时执行。
尝试使用单例模式:
var Foo = new function Foo() {
this.fn = this.prototype;
};
在本例中,您将通过在命名的匿名 Foo()
函数上调用 new
运算符来创建 Foo
对象的实例。
这对jQuery来说不是问题。 正如另一个答案中指出的那样,您的代码中至少存在一个问题。
如果你真的想理解这一点,John Resig(jQuery的原作者(整理了一个优秀的交互式教程,名为Learning Advanced Javascript。