写的项目需要把js封装处理,不然很乱。。然后就想到前端大神阮一峰了,去blog搜索一下果然有收获

参考文章:

Javascript定义类(class)的三种方法

Javascript 面向对象编程(一):封装

 

此处使用极简主义法:

 

如何定义一个类:

此法是定义一个生成器以及构造函数(类似工厂模式吧)

var Cat = {

    createNew: function(){

    var cat = {};

    cat.name = "大毛";

    cat.makeSound = function(){ alert("喵喵喵"); };

    return cat;

  }

};

Cat是生成器类,createNew是一个构造器函数,cat是实体对象,cat.name是成员变量

 

如何调用构造器:

var cat1 = Cat.createNew();
cat1.makeSound(); // 喵喵喵

 

如何定义私有变量:

cat.name是一个公有变量,外部可以直接访问

定义私有变量的方法则是在构造函数里定义一个局部变量,这样只有类的成员函数能够访问这个变量了,外部访问是undefined

var Cat = {
    createNew: function(){
    var cat = {};
    var sound = "喵喵喵";
    cat.makeSound = function(){ alert(sound); };

    var privateFun() {alert("private")}
    cat.publicFun() {
      privateFun(); //注意这里不能用this.privateFun();,会报错
      alert("public");
    }
    
return cat;   } };

测试结果

var test = Cat.createNew();
test.privateFun(); // undefined
test.publicFun(); // "private" "public"

 

 

 

如何定义静态变量(数据共享):

在Cat这个构造类内定义变量。。这就涉及到闭包的知识了,Cat类只存在一个实力,而cat1=Cat.createNew(),实际上是在Cat类的一个子函数定义一个变量,子函数是可以访问父类/父函数内的变量的,所以无论那个实体类修改Cat的成员变量的时候,Cat这个类里的变量就修改了,就实现了相当于Java的静态变量的功能了

var Cat = {
    sound : "喵喵喵",
    createNew: function(){
    var cat = {};
    cat.makeSound = function(){ alert(Cat.sound); };
    cat.changeSound = function(x){ Cat.sound = x; };
    return cat;
  }
};

这样sound就是一个静态变量

然后生成两个实例对象并用其中一个修改sound

var cat1 = Cat.createNew();
var cat2 = Cat.createNew();
cat1.makeSound(); // 喵喵喵

cat2.changeSound("啦啦啦");
cat1.makeSound(); // 啦啦啦

 

 

 

cat2.changeSound("啦啦啦");

  cat1.makeSound(); // 啦啦啦

 posted on 2015-03-11 19:35  someblue  阅读(217)  评论(2编辑  收藏  举报