javascript - jQuery 是如何工作的 : I get "Cannot set property xxx of undefined" when trying a similar prototype thing?

标签 javascript jquery prototype

JQuery 是如何处理“Cannot set property xxx of undefined”的问题?”如果我有:

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 是否就是这样做的。

关于javascript - jQuery 是如何工作的 : I get "Cannot set property xxx of undefined" when trying a similar prototype thing?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5573090/

相关文章:

javascript - 为什么在 Chrome 中,当在 mousedown 处理程序中附加输入时,它会获得焦点?

javascript - HTML5 ondrop 事件在 zip.js 完成操作之前返回

javascript - 如何制作一个小 helper 来引导访客通过我的配置器(包括示例)?

javascript - 在 Javascript 中,为什么 Object.getPrototypeOf([1,2]) 返回一个空列表?

javascript - jquery javascript 将数组重置为 1

php - 带有 ajax 请求的 Highcharts

javascript - 禁用滚动但使用 JavaScript 捕获滚动数据?

prototype - Lisp 和 Scheme 存在哪些 POOP 框架

javascript - jQuery/$ 为何既是函数又是 'prototype root'

javascript - IE中的脚本调试