(function (window, $, undefined) {
if (!$) { console.log("FQfast缺少jQuery依赖!"); return; }
var FQfast = function () {
return FQfast.fn.init();
}; FQfast.fn = FQfast.prototype = {
init: function () {
return this;
}
};
// 添加扩展方法
FQfast.extend = FQfast.fn.extend = function () {
console.log("extend");
var options, name, src, copy,
target = arguments[0] || {},
i = 1,
length = arguments.length;
if (length == 1) {
target = this;
i--;
}
for (; i < length; i++) {
if ((options = arguments[i]) != null) {
for (name in options) {
src = target[name];
copy = options[name];
if (src === copy) {
continue;
}
if (copy !== undefined) {
target[name] = copy;
}
}
}
}
return target;
}
FQfast.extend({
Dialog: function () { alert("测试"); },
});
alert(FQfast.Dialog());
// 将框架变量 -> window
console.log("window");
window.FQfast = FQfast();
})(window, $);
最近在研究jQuery的源码,想自己理解一下,然后写着玩。我发现在匿名方法内部调用FQfast.extend()是无效的,只有放在外面,我很是不解,然后就加了一个alert(FQfast.Dialog());测试一下,发现,竟然被调用了两次,第一次弹出的是“测试”,第二次就undefind了。头有点儿晕了,求大神解释一下。
--------------------------------------------------------------------------------
javascriptjquery扩展
if (!$) { console.log("FQfast缺少jQuery依赖!"); return; }
var FQfast = function () {
return FQfast.fn.init();
}; FQfast.fn = FQfast.prototype = {
init: function () {
return this;
}
};
// 添加扩展方法
FQfast.extend = FQfast.fn.extend = function () {
console.log("extend");
var options, name, src, copy,
target = arguments[0] || {},
i = 1,
length = arguments.length;
if (length == 1) {
target = this;
i--;
}
for (; i < length; i++) {
if ((options = arguments[i]) != null) {
for (name in options) {
src = target[name];
copy = options[name];
if (src === copy) {
continue;
}
if (copy !== undefined) {
target[name] = copy;
}
}
}
}
return target;
}
FQfast.extend({
Dialog: function () { alert("测试"); },
});
alert(FQfast.Dialog());
// 将框架变量 -> window
console.log("window");
window.FQfast = FQfast();
})(window, $);
最近在研究jQuery的源码,想自己理解一下,然后写着玩。我发现在匿名方法内部调用FQfast.extend()是无效的,只有放在外面,我很是不解,然后就加了一个alert(FQfast.Dialog());测试一下,发现,竟然被调用了两次,第一次弹出的是“测试”,第二次就undefind了。头有点儿晕了,求大神解释一下。
--------------------------------------------------------------------------------
javascriptjquery扩展
解决方案 »
- jQuery操作动态输出的并列div怎么弄啊
- 在function原型里加方法 会不会占内存
- 关于gridPanel带checkbox的问题,急!
- js方法执行问题 方法里的操作要到改方法执行结束后才能有结果 如何解决这问题
- DIV被表单控件挡住了怎么办呢?
- 各位请进!!弹出窗口问题,如何不让active窗口弹出!!先谢谢了
- 精品JS脚本下载:XMLTree2.1,不下可要后悔的
- 为空或不是对象---问题大讨论---100分
- 隐藏钮如何得到当前的系统时间值
- 想用javascript写个麻将,有没有大神指点下胡牌的算法呢?
- 怎么用javascript改变div标签的位置
- Asp和JavaScript结合循环、语法等问题求解。。。百度地图
对对对,是这样的,可以我在外面使用这个FQfast.Dialog()方法为什么不行呢?大神帮忙看一下,
这句调用FQfast.fn.init(),最终
init: function () {
return this;//这里的this是FQfast.prototype
}
返回的是FQfast.prototype,而你FQfast.extend({
Dialog: function () { alert("测试"); },
});只是给FQfast添加了Dialog,而不是给FQfast.prototype添加了Dialog不知道你明白没?
是的。函数里的this指向调用者。所以你如果写成FQfast.fn.extend({Dialog:function(){..}}),this指向的就是FQfast.fn。这样最终你在window下面就可以直接访问到。或者你像3楼说的那样,返回不用改上面的FQfast.extend({Dialog:function(){..}})也可以调用到Dialog方法