多听几次就好啦。
我也发了,我感觉有问题,应该是 instance[settins]() 这个[]的意思,就是.属性的意思,只是有些属性比如 A.B 这个B总不能是字符串把,那如果B是字符串怎么办,那就A[B] 就是这个意思
在each方法内部this指的是普通的dom元素,如果需要调用jQuery的方法那就需要用$来重新包装一下。
data()是向元素附加数据,然后取回该数据
var instance=me.data('pageSwitch');
me.data('pageSwitch')取出pageSwitch(插件)的数据并赋给了instance
我的理解是解析器会将html解析成一个数,然后$这个其实就是个符号,解析器会通过这个找到jquery包中的方法遍历查找这个树.....纯属猜
1.function PageSwitch(element, options){ // 定义属性}; // 是构造函数,me对象是通过它创建的
2.PageSwitch.prototype = {//定义常量或方法do something...}
//PageSwitch.prototype指的是PageSwitch对象的原型对象,在本例子中直接使用一{}作为原型,在原型对象中定义常量或方法,减少消耗
....没有用else 直接判断不存在的话 就给me绑定一个实例 这里instance和me没什么逻辑关系 instance就是一个变量而已 来存放返回值
PageSwitch这个对象,建议专门看看关于this指向的一些东西,网上挺多的。还有闭包
首先 init 是对象里的一个方法, 对象的方法也是对象的一种特殊属性, 比如: var person={name:"张三",ear:function(){console.log("吃");}}; 则 alert(person.name); 和 alert(person["name"]); 效果是相同的
同样, person.eat(); 和 person['eat']() 也是一样的 上就是利用了这一点, 你把 eat 方法, 换成 init 就明白了
这里设置成页数*100%是为了让页面切换又滑动效果,就像焦点图一样,如果设置成100%就没有滑入滑出的效果了,就成了直接变成下一张的效果。
this就是jQuery对象,不然怎么能调用each()方法?
if ($.type(options) == "string") {
return instance[options]();
}
这里他在演示如果需要调用init方法需要怎么做。
他这里有判断如果传进去是个字符串的话,就调用实例上面的对应的方法。
instance[options]();
这里instance是instance = new PageSwitch($me, options);
实例可以调用构造函数prototype上的方法。
这里return回去的是啥
首先 链接式操作就是执行了一个方法,可以再执行另一个方法,直接写在方法的后面。this.each遍历的是一个数组,因为你不能保证返回的只有一个jq对象(这里纠正一下,这里的函数作为对象的方法时返回this是指向的该对象,也就是说不是你说的返回对象的每个属性,这里关于this的使用建议你看一下慕课上有一位老师讲的js深入浅出,)你若保证你的插件每次都只会用一个JQ对象,那么你可以直接return this.另外me.data("pageSwitch")是在这个对象上绑定数据,个人认为这里就是给目标对象绑定这个插件的功能。你可以查一下w3c中jq方法的数据绑定data();个人理解,希望可以帮到你。。。。
我觉得楼上说的对,是你调用这个插件时候的jq对象。
构造函数的原型如果写成 PageSwitch.prototype = {},那么原型中的constructor属性确实会指向原生Object对象,其实个人觉得这个属性也并没有什么作用,如果实在想改,可以将它手动改成PageSwitch。
按照一般顺序,先写构造函数 function PageSwitch(){} 再写原型 PageSwitch.prototype = {},之后实例化。这样是没有什么问题的,实例调用的方法还是构造函数原型中的方法,但是如果先实例化之后再修改原型就会有问题,就是你说的覆盖。
回到这个代码上,因为是按照正常顺序来写的,实例化是在写完原型之后,所以没有问题。
匿名函数,就把这个功能独立出来,它里面的变量不会被外面的污染,它自己也不会污染全局。
视频中有写到 “$.fn === $.prototype”,你就按照js中添加原型方法去理解就可以了。
$.fn.PageSwhitch 是给jquery添加一个原型链,相当于加一个属性,当你用jquery选取对象时,这个原型链也会赋予给这个对象。
PageSwhitch就是相对应的属性。
所有的方法及属性都封装在一个实例里面,只需要new一个实例就可以
me是调用插件的jq对象,视频中就是$("#container")这个对象。options是用户传递的设置参数
第一个是PageSwitch对象,第二个是jq原型上的方法
只生成一个实例,可以避免过多的实例不好管理,比如一个人售票还好,再多一个人售票就会产生进程之间的一系列问题,
看老师有没有上传咯,在视频右下方可以看到资料下载,不然找老师要
$.type是jQuery内置的判断类型的工具方法,我们知道的判断类型的方法不是非常靠谱,例如typeof null将会得到Object。你可以理解为更准确的判断类型。
我也不明白这里,感觉多此一举
一个单独的作用域就是一个包,自执行函数就是闭包,有问题么?
sublime emmet