-
这个方法特别实用查看全部
-
高大上的设计模式查看全部
-
设计模式概念查看全部
-
模板方法。 只需要继承实现。 抽象父类,具体实现的子类。 prototype 原型。console控制台。 分离出共同点。分离出来抽象父类。统一修改按住控制+D. 通过原型链访问的。强制子类要重写。 可以在父类方法中抛出错误。如果没有重写,就会是父类的错误。 钩子方法。查看全部
-
将父类的实例化对象直接赋值给子类的原型对象,如果父类的属性庞大会影响性能,所以构造一个函数,用于只继承父类的原型方法查看全部
-
设计模式定义查看全部
-
模板方法。 只需要继承实现。 抽象父类,具体实现的子类。 prototype 原型。console控制台。 分离出共同点。分离出来抽象父类。统一修改按住控制+D. 通过原型链访问的。强制子类要重写。 可以在父类方法中抛出错误。如果没有重写,就会是父类的错误。 钩子方法。查看全部
-
当封装一个函数时,你是在复用代码;而当使用一个设计模式时,你是在复用他人的经验。查看全部
-
* 代码中的问题: * 1.含有过多的全局变量num,$rating,$item等,多人共同开发时容易造成变量同名从而被覆盖产生bug(模拟命名空间或者用闭包解决) * 2.事件绑定的写法为每颗星星都绑定了事件,当星星数过多时造成浪费 (事件委托(事件代理):根据冒泡的特性,在父容器上绑定一次事件即可,通过判断在父元素中判断是不是相应的子元素触发了相应的事件) * 3.不能实现代码复用,多个评分要通过复制代码修改后使用。查看全部
-
整理下js的思路: 写好主功能函数,就是点亮这个函数-->为元素一一绑定事件 为元素绑定事件有个小细节:mouseout事件绑定在ul这个父容器上,而不是li单个项目上。 完善: 全局变量重名或者冲突,解决方法:自我匿名函数,就是用一个闭包 不用为每个li都绑定事件,只需要为他们父容器绑定即可,利用事件的冒泡处理 $rating.on('mouseover','.rating-item',function(){},子元素事件委托给父元素处理 为了实现功能复用,我们可以把它写成一个模块,可以用函数来实现,利用函数带参实现不同需求; 命名为init函数,怎么使用呢?就可以用return返回来使用,而return返回对象的话就可以这样使用:rating.init("#el",num) 这里有个小细节:功能函数例如lightOn因为只需要申明一次就可以把它放到init函数外面。查看全部
-
* 代码中的问题: * 1.含有过多的全局变量num,$rating,$item等,多人共同开发时容易造成变量同名从而被覆盖产生bug(模拟命名空间或者用闭包解决) * 2.事件绑定的写法为每颗星星都绑定了事件,当星星数过多时造成浪费 (事件委托(事件代理):根据冒泡的特性,在父容器上绑定一次事件即可,通过判断在父元素中判断是不是相应的子元素触发了相应的事件) * 3.不能实现代码复用,多个评分要通过复制代码修改后使用。查看全部
-
设计模式查看全部
-
设计模式包含的内容查看全部
-
设计模式就是指经验的总结,利用总结来解决现在存在的问题查看全部
-
js中每个函数都有两个非继承而来的方法:apply()和call(), 两个方法都接收两个参数, 其中第一个参数都是函数的作用域(用来改变(扩充)原函数的作用域), 使原函数中的this指向新的作用域中的变量对象; 第二个参数的唯一区别是, apply方法传入参数数组, call方法直接传递每个参数。所以, 对此作出的解释大概为(见解不够深刻, 可能会有小问题欢迎指出): 原来self.opts中select函数中的this是指向函数的调用者(this一般指向函数调用者), 也就是self即LightEntire的实例化对象, 所以控制台输出了这个对象, 后因为使用了call方法, 传入了this作为第一个参数, 注意这里的this是指向每个".rating-item"也就每个星星, 然后select函数中this的指向发生了变化, 重新指向了".rating-item"。 $(".rating-item").on("mouseover", function(){ console.log(this); // 这里相当于新的函数作用域, this指向$(".rating-item") }); ——概念请参考《JavaScript高级程序设计》-第三版第四章和第五章5.5.5查看全部
举报
0/150
提交
取消