随着越来越多的大型项目使用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、当多页面需要共用代码(公共组件)时使用“匿名函数”方式。
>>> Hello World <<<
这篇内容是否帮助到你了呢?
如果你有任何疑问或有建议留给其他朋友,都可以给我留言。
目前有有一条留言:
写得不错