MVC是一种设计模式,独立于任何一门语言.
它将应用划分为3个部分:数据(模型),展示层(视图)和用户交互层(控制器)
一个事件的发生是这样的过程:
var Controller={};
//使用匿名函数来封装一个作用域
(Controller.users=function($){
var nameClick=function(){/*...*/};
//在页面加载时绑定事件监听
$(function(){$("#view .name").click(nameClick)});
})(jQuery);
向模块化进军,创建类
var Class=function(){
var klass=function(){
this.init.apply(this,arguments);
};
klass.prototype.init=function(){};
return klass;
};
var Person = new Class;
Person.prototype.init=function(){
};
var person = new Person;
给类添加函数
Person.find=function(id){/*..*/};//静态函数
Person.prototype.breath = function(){/*...*/};//书上说是实例函数,但是我认为是基于原型链继承的函数,对象实例共享的方法
,如果实例对象的属性名与继承的属性名相同,继承的属性将被覆盖(overhide),除非显示调用继承的属性
一种常用的模式是给类的prototype起一个别名fn,写起来方便;
Person.fn=Person.prototype;
Person.fn.run=function(){};
给’类’库添加方法
现在,我们的"类"库(class library)包含了生成一个实例并初始化这个实例的功能,给类添加属性和给构造函数添加属性是一样的.
var Class=function(){
var klass=function(){
this.init.apply(this,arguments);
}
klass.prototype.init=function(name,age){this.name=name;this.age=age;};
//定义prototype的别名
klass.fn = klass.prototype;
//定义类的别名
klass.fn.parent=klass;
//给类添加属性
klass.extend=function(obj){
for(var i in obj){
if(!obj.hasOwnProperty(i))continue;
klass[i] =obj[i];
}
var extended=obj.extended;
if(extended) extended(klass);
};
//给实例添加属性
klass.include=function(obj){
var included=obj.included;
for(var i in obj){
if(!obj.hasOwnProperty(i))continue;
klass.fn[i] =obj[i];
}
if(included) included(klass);
};
return klass;
};
var ORMModule={
//共享函数
save:function(){}
};
var Person=new Class;
var Asset = new Class;
Person.include(ORMModule);
var asset = new Asset;
var person = new Person;
console.log(typeof asset.save);//"undefined"
console.log(typeof person.save);//"function"