jQuery如何工作:尝试类似的原型时"Cannot set property xxx of undefined"?



>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。

相关内容

最新更新