2016年04月21日   码农之路   3,499 次浏览

随着越来越多的大型项目使用JavaScript,JavaScript代码的编写和维护便成为一个非常重要的事情。而JavaScript的全局变量(全局变量是魔鬼)是最最令人头痛的事情,为了解决这个问题,那么项目中就必须使用模块化策略进行开发。目前,业界的主流做法是采用”面向对象编程”。那么Javascript如何实现面向对象编程呢?
一、面向过程编程
首先,我们先说说最简单的面向过程编程:
var name = “JavaScript” // 定义的变量就变成的全局变量
function setName(name) {
     // do something
}

缺点:变量和方法易冲突,不易维护

 

二、面向对象编程

1、通过object初始化空对象

var cat = new Object();
cat.name = “JavaScript”;
cat.setName = function() {
     // do something
}
缺点:对象的属性和方法代码不能重用,结构不清晰

2、通过构造函数初始化对象(经典方法,也是教科书必教的方法)

function Cat() {
    this.name = “JavaScript”;
    this.setName = funtcion() {
         // do something
    }
}
Cat.prototype.staticData = 1; // 可通过prototype在不同实例间共享数据
var cat1 = new Cat();
var cat2 = new Cat();
缺点:用到了this和prototype,增加了编写和阅读的复杂度

3、直接初始化对象

var Cat = {
      name : “JavaScript”// 实例独有
      setName : function() {
             // do something
      }
}
var cat1 = Object.create(Cat);
var cat2 = Object.create(Cat);
缺点:不能实现私有属性和私有方法,实例对象之间也不能共享数据
4、极简主义法(由荷兰程序员提出)
var Cat = {
      typeName : “猫”// 所有实例共享
      init : function() {
             var cat = {};
             cat.name = “JavaScript”;
             cat.setName = function() {
                   // do something
            };
               
             var privateVar = “”// 私有变量
             function privateMethod() { } // 私有方法
 
             return cat;
      }
}
var cat1 = Cat.init();
var cat2 = Cat.init();

缺点:代码理解复杂度有点高

优点:可以实现封装、继承这些特性

三、匿名函数(闭包)

( function(){
    var Cat = ( function(){
       var cat = {};
      cat.name = “JavaScript”;
      cat.setName = function() {
             // do something
      };
       return cat;
      })();
      window.Cat = Cat;
})();
优点:可以避免全局对象冲突
总结:
1、我们要尽量避免面向过程方式的编程;
2、当单页面业务简单时使用“直接初始化对象”方式;
3、当单页面实例间存在共享数据时使用“通过构造函数初始化对象”方式;
4、当单页面需要实现面向对象的更多高级特性时使用“极简主义法”方式;
5、当多页面需要共用代码(公共组件)时使用“匿名函数”方式。
赞 赏
申明:除非注明,本站文章均为原创,转载请以链接形式标明本文地址。 如有问题,请于一周内与本站联系,本站将在第一时间对相关内容进行处理。
本文地址: http://www.yyjjssnn.cn/articles/718.html

>>> Hello World <<<

这篇内容是否帮助到你了呢?

如果你有任何疑问或有建议留给其他朋友,都可以给我留言。

目前有有一条留言:

  • 1# 匿名:
    2016-05-24 14:12

    写得不错

:wink: :twisted: :surprised: :smile: :smile9: :smile8: :smile7: :smile6: :smile5: :smile56: :smile55: :smile54: :smile53: :smile52: :smile51: :smile50: :smile4: :smile49: :smile48: :smile47: :smile46: :smile45: :smile44: :smile43: :smile42: :smile41: :smile40: :smile3: :smile39: :smile38: :smile37: :smile36: :smile35: :smile34: :smile33: :smile32: :smile31: :smile30: :smile2: :smile29: :smile28: :smile27: :smile26: :smile25: :smile24: :smile23: :smile22: :smile21: :smile20: :smile1: :smile19: :smile18: :smile17: :smile16: :smile15: :smile14: :smile13: :smile12: :smile11: :smile10: :smile0: :sad: :rolleyes1: :redface: :razz: :question: :neutral: :mrgreen: :mad: :lol: :idea: :exclaim: :evil: :eek: :cry: :cool: :confused: :biggrin: :arrow:

友情链接: 程序员刘杨 刘杨
Copyright 2003~2018 保留所有权利 | 网站地图
备案号:湘ICP备14001005号-2

湘公网安备 43011102001322号