4种js设计模式
模块模式(module)
原型模式(prototype)
观察者模式(observer)
单例模式(singleton)
模块模式是js种最被常用的设计模式,可以使特定部分的代码与其他部分的代码相对独立,通过松散的耦合支撑了良好的代码结构
可以解决的问题:1.封装---可以避免自身的状态和行为被其他模块获取2.模块应该是立即执行函数也就是闭包,闭包之外的代码不能获取这些私有变量,因为他们不在一个作用域
揭示模块设计模型
是模块设计模型的一个变种
目的:在保有封装的前提下,在返回的对象字面上暴露特定变量和方法
带来的问题(缺点)1.不能引用私有方法,给测试带来麻烦2.公共行为不可覆盖
原型设计模式依赖于js原型继承
原型模式主要用于在性能密集的条件下创建对象。
通过传递员是对象的克隆(浅客隆)来创建对象
例:执行数据库操作去创建一个对象,如果另一个应用要使用这个对象,只需要去克隆之前的那个对象即可不需要对这个数据库操作
如何去克隆一个对象构造器去实例化一个对象,使用prototype,绑定变量和方法
如果一个对象改变了,它会对依赖他的对象进行告知,告诉他有变化发生了
subject,observer,concret对象都是必要的对象。 subject包含了到observer和concret的引用,从而能够通知任何变化,observer是一个抽象的类,可以允许观察者实现通知的方法
缺点:当观察者增多的时候性能会有显著下降
单例模式只允许单次实例化,单例模式组织了客户端创建多个实例,一个对象被创建了后,会返回自己的实例
Vue属于MV*架构模式
Vue准确说是MVC模式,
M:model(模型)
V:view(视图)
C(控制器)
MCV
也就是说model数据和view视图不能直接交互,需要中间环节也就是C(控制器)去实现数据体现在界面的桥梁
基本的写法
letvm=newVue({ el:'',data:{ } })
‘v-'是Vue的指令
API
Vue.extend:
使用Vue基础构造器,创建一个子类,参数是包含子类的对象
var test=Vue,extend({ tempalte:'
{{a}},{{b}}{{c}}
', data:{ a:1, b:2, c:3 }})new test().$mount('#box')
vue.nextTick()
改变DOM后才会执行nextTick(function(){
})里的函数
vue.set(object,key,value)设置对象的属性 主要用于避开vue不能检测属性被添加的限制 触发视图更新
vue.delete(object,key)删除对象的属性
vue.directive注册或全局指令
//注册Vue.directive('test',{ bind:function(){}, insert:function(){}, updata:function(){}, componentUpdata(){}, unbind:function(){}})vardirTest=Vue.directive('test');
vue.filter过滤器
vue.filter('test',function(value){})varmyfilter=vue.filter('test')