求大神帮忙看一下JS
(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了。头有点儿晕了,求大神解释一下。
--------------------------------------------
javascript jquery 扩展
[解决办法]
第一次执行的是Dialog方法,所以alert了测试
第二次执行的是alert(FQfast.Dialog());你这个方法没有返回值,所以alert了undefined;
[解决办法]
window.FQfast = FQfast();这句应该改成window.FQfast = FQfast;吧
[解决办法]
window.FQfast = FQfast();
这句调用FQfast.fn.init(),最终
init: function () {
return this;//这里的this是FQfast.prototype
}
返回的是FQfast.prototype,
而你FQfast.extend({
Dialog: function () { alert("测试"); },
});只是给FQfast添加了Dialog,而不是给FQfast.prototype添加了Dialog
不知道你明白没?
[解决办法]