简单的控制器结构

  1. var Controller = {};
  2. //创建一个users控制器
  3. (Controller.users = function ($) {
  4. var nameClick = function() {
  5. //....
  6. };
  7. $(function() {
  8. $("#click").click(nameClick);
  9. });
  10. })(jQuery);

  1. var Controller = {
  2. user: function($) {
  3. var userClick = function() {
  4. //....
  5. };
  6. $(function() {
  7. $("#tabs").click(userClick);
  8. })
  9. }
  10. };
  11. Controller.user(jQuery);

创建类

  1. var Class = function() {
  2. //js保留了class名称
  3. var klass = function() {
  4. //this为创建的实例,其在编译阶段就被赋予相应属性了;
  5. this.init.apply(this, arguments);
  6. }
  7. klass.prototype.init = function() {this.name = "klass"};
  8. return klass;
  9. }
  10. //这里等价于var Person = Class();
  11. var Person = new Class;
  12. Person.prototype.init = function() {this.name = "person"};
  13. //生成的实例的类型为Klass
  14. var person = new Person;

根据传入参数稍作处理

  1. var Class = function () {
  2. var klass = function() {
  3. arguments = arguments[0];
  4. this.init.call(this, arguments);
  5. }
  6. klass.prototype.init = function(obj) {
  7. var name = obj.name || "klass";
  8. this.name = name;
  9. }
  10. return klass;
  11. };
  12. var Person = new Class;
  13. Person.prototype.init = function(obj) {
  14. var name = obj.name || "person";
  15. this.name = name;
  16. };
  17. var person = new Person({name:"jinks"});

给“类”库添加方法

  1. var Class = function() {
  2. var klass = function() {
  3. this.init.apply(this, arguments)
  4. };
  5. klass.fn = klass.prototype;
  6. klass.fn.parent = klass;
  7. klass.fn.init = function(){};
  8. //这是给类方法添加方法
  9. klass.extend = function(obj) {
  10. var extended = obj.extended;
  11. for(var prop in obj) {
  12. klass[prop] = obj[prop];
  13. }
  14. extended && extended(klass);
  15. }
  16. //与extend不同,方法使直接写进继承的原型中
  17. klass.include = function(obj) {
  18. var included = obj.included;
  19. for(var prop in obj) {
  20. klass.fn[prop] = obj[prop];
  21. }
  22. included && included(klass);
  23. }
  24. return klass;
  25. }
  26. //Person通过fn属性来访问klass.prototype
  27. var Person = new Class;
  28. Person.prototype.init = function() {
  29. this.name = "person";
  30. //...
  31. }
  32. //注意这是方法不是对象,不是引用地址,所以每个类添加的方法不会共用
  33. Person.extend({
  34. find: function() {},
  35. exists: function() {},
  36. });
  37. //添加给类方法的原型中,所以同一类方法的实例都会有
  38. Person.include({
  39. save: function() {},
  40. destroy: function() {}
  41. });
  42. //person通过parent来访问klass
  43. var person = new Person;

基于原型的类继承

  1. var Animal = function() {};
  2. Animal.prototype.breath = function() {
  3. console.log("breath");
  4. }
  5. var Dog = function() {};
  6. //Dog继承了Animal
  7. Dog.prototype = new Animal;
  8. Dog.prototype.wag = function() {
  9. console.log("wag tail");
  10. }
  11. var dog = new Dog;
  12. dog.wag();
  13. dog.breath();

给“类”库添加继承

  1. var Class = function(parent) {
  2. var klass = function() {
  3. this.init.apply(this, arguments);
  4. }
  5. //基于基于原型的类继承,改变klass原型
  6. if(parent) {
  7. var subclass = function() {};
  8. subclass.prototype = parent.prototype;
  9. klass.prototype = new subclass;
  10. }
  11. klass.fn = klass.prototype;
  12. klass.fn.parent = klass;
  13. klass.fn.init = function(){};
  14. /*include和extend代码*/
  15. return klass
  16. }
  17. var Animal = new Class;
  18. Animal.include({
  19. breath: function() {}
  20. });
  21. var Cat = new Class(Animal);
  22. var tommy = new Cat;
  23. tommy.breath();

控制"类"库的作用域

  1. var Class = function(parent) {
  2. var klass = function() {
  3. this.init.apply(this, arguments);
  4. }
  5. if(parent) {
  6. var subclass = function() {};
  7. subclass.prototype = parent.prototype;
  8. klass.prototype = new subclass;
  9. }
  10. klass.prototype.init = function() {};
  11. klass.fn = klass.prototype;
  12. klass.fn.parent = klass;
  13. klass.extend = function(obj) {
  14. var extended = obj.extended;
  15. for(var i in obj) {
  16. klass[i] = obj[i];
  17. }
  18. if(extended) extended(klass)
  19. };
  20. klass.include = function(obj) {
  21. var included = obj.included;
  22. for(var i in obj) {
  23. klass.fn[i] = obj[i];
  24. }
  25. if(included) included(klass)
  26. }
  27. klass.proxy = function(func) {
  28. var self = this;
  29. return (function() {
  30. return func.apply(self, arguments);
  31. });
  32. }
  33. klass.fn.proxy = klass.proxy;
  34. return klass;
  35. }
  36. var Button = new Class;
  37. Button.extend({
  38. init: function(elem) {
  39. this.elem = jQuery(elem);
  40. this.elem.click(this.proxy(this.click));
  41. //上面其实等价于: this.elem.click(this.click.bind(this));
  42. },
  43. click: function() {alert(0)}
  44. });
  45. Button.init("button");

mvc-1mvc和类(1)的更多相关文章

  1. 一点ASP.NET MVC Html.Helper类的方法

    一点ASP.NET MVC Html.Helper类 这里就只写一个Html.ActionLink()和Html.DropdownList(). Html.ActionLink()里有三个参数,第一个 ...

  2. PHP MVC框架核心类

    PHP MVC框架核心类 现在我们举几个核心框架的例子演示:在framework/core下建立一个Framework.class.php的文件.写入以下代码: // framework/core/F ...

  3. asp.net mvc自定义JsonResult类来防止MaxJsonLength超过限制

    前不久在做一个项目的时候,我用到了mvc的webapi返回了一个大数据,结果报了500错误,如下图所示: Server Error in ‘/’ Application. Error during s ...

  4. (译文)MVC通用仓储类

    Generic Repository Pattern MVC Generic Repository Pattern MVC 原文链接:http://www.codeproject.com/Articl ...

  5. MVC缓存OutputCacheAttribute 类提高网站效率(转)

    原文转自:http://www.cnblogs.com/iamlilinfeng/p/4419362.html 命名空间:  System.Web.Mvc 程序集:  System.Web.Mvc(在 ...

  6. spring mvc 的Controller类默认Scope是单例(singleton)的

    使用Spring MVC有一段时间了,之前一直使用Struts2,在struts2中action都是原型(prototype)的, 说是因为线程安全问题,对于Spring MVC中bean默认都是(s ...

  7. 自己动手写控件(模仿mvc htmlhelper的类)

    自定义helper类,要求命名空间在 System.Web.Mvc之下,要求,静态类,静态方法,特殊生成对应html的返回字段, 传递Htmlhleper,返回特定类型 返回值是MvcHtmlStri ...

  8. MVC Controller 基类中的Request

    今天在测试自己MVC程序的时候发现之前写代码的一个BUG,需求是每个页面要获取当前URL链接中包含的城市ID,我把获取url的方法写到了Controller的基类BaseController(Base ...

  9. ASP.NET MVC 创建控制器类过程

    MvcHandler.ProcessRequestInit()方法: 1.1获取控制器的名称string requiredString = this.RequestContext.RouteData. ...

  10. Spring MVC中一般类使用service

    在Spring MVC中,Controller中使用service只需使用注解@Resource就行,但是一般类(即不使用@Controller注解的类)要用到service时,可用如下方法: 1.S ...

随机推荐

  1. hdu 5183. Negative and Positive (哈希表)

    Negative and Positive (NP) Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 K (Ja ...

  2. [Effective JavaScript 笔记] 第1章:让自己习惯javascript小结

    在这里整理一下,每条对应的提示 第1条:了解使用的js版本 确定应用程序支持的js的版本(浏览器也是应用程序噢) 确保使用的js特性是应用程序支持的(要不写了也运行不了) 总是在严格模式下编写和测试代 ...

  3. Linux SUID SGID 讲解

    SUID属性 UNIX的内核是根据什么来确定一个进程对资源的访问权限的呢? 是这个进程的运行用户的(有效)ID,包括user id和group id.用户可以用id命令来查到自己的或其他用户的user ...

  4. 【原创】Mapped Statements collection does not contain value for DaoImpl.method

    问题: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.Pers ...

  5. Codebook model 视频抠像 xp sp3 + vs2005 + OpenCV 2.3.1

    Codebook model 视频抠像 xp sp3 + vs2005 + OpenCV 2.3.1 源码及详细文档下载 svn checkout http://cvg02.googlecode.co ...

  6. HDU 1452 Happy 2004 (逆元+快速幂+积性函数)

    G - Happy 2004 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Subm ...

  7. Intellj IDEA快捷键

    Alt+回车 导入包,自动修正 Ctrl+N   查找类 Ctrl+Shift+N 查找文件 Ctrl+Alt+L  格式化代码 Ctrl+Alt+O 优化导入的类和包 Alt+Insert 生成代码 ...

  8. [hihoCoder] 博弈游戏·Nim游戏

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 今天我们要认识一对新朋友,Alice与Bob.Alice与Bob总是在进行各种各样的比试,今天他们在玩一个取石子的游戏.在 ...

  9. linux rdsktop 运程管理 windows

    [root@ok ISO]# yum list |grep rdesktop rdesktop.x86_64 1.7.1-1.el6 base [root@ok ISO]# yum install r ...

  10. Java Hour 42 fastjson

    fastjson 神一样的存在,然后由于缺乏文档,很多功能完全不知道该怎么用. 42.1 字段的大小写问题 刚开始没想到会因为字段的大小写问题而导致反序列化json 失败. @Override pub ...