js开发模式

js中的开发模式进化史:



js中有最初的只能由基本数据类型描述——》单例模式--》工厂模式--》构造函数模式--》原型模式--》各个模式相结合的混合模式,下面我会给你们逐一讲解各个开发模式;浏览器

 一、单例模式

第一次模式升级引用了对象数据类型:模块化

对象数据类型的做用级好处:函数

        一、分组,把描述同一个事物的全部属性放在一块儿来描述,每一组都是一个单独的个体(单独的实例);this

        二、避免冲突-每个分组中都有本身的私有属性及值,和其余分组不会产生冲突。spa

var person ={
    name:"张松",
    age:26
}
var person1 = {
        name:"zys",
       age:26;
}

 

咱们用以上对象把两个个体实现了分组和独立开,咱们说每个对象都是一个单独的个体|实例    --这就是单例模式(就是一个普通的对象);person不只叫对象名还能够叫作”命名空间“;prototype

单例模式能够实现简易的”模块化开发“code

 

二、工厂模式:

单例模式虽然实现了分组的做用,可是仍是处于手工做业模式,为了增长生产的效率,实现批量生产,就有了工厂模式;模块化开发

工厂模式其实就是一个函数;对象

函数的封装:把实现同一个功能的相同代码放在一个函数中,之后再想实现这个功能的时候,咱们只须要直接的执行这个函数就可,减小了页面中的坑余代码,提升代码的重复使用率【低耦合高内聚】blog

 

function  sayHello(name){
   var obj={};
    obj.name = name;
  obj.say= function(){ "Hello "+this.name};
  return obj;
}
var person1 = sayHello("张松”); person1.say();

 

js中存在多态一词,多态指的是一个方法的多种形态

同一个方法根据执行时传递参数的不一样(值不一样、类型不一样、参数数量不一样)实现不同的功能的操做就叫作多态

 

三、构造函数:

构造函数模式:经过new一个类来建立一个实例;

构造函数模式和工厂模式的区别:

通常状况下,咱们若是是经过构造函数来建立一个类的话,咱们的类名第一个字母要大写,这不是规范,而是你们约定的一个规律;

一、在执行时,构造函数模式是经过 new Object()来执行的,咱们把Object称之为一个类,而经过类建立出来的结果(person)就是当前类的一个实例;

二、类也是一个函数,因此也会像普通函数执行同样,造成私有的做用域,形参赋值,预解释,代码从上到下执行;可是构造函数模式在执行以前,浏览器默认会建立一个对象数据类型的值,而且会默认的把这个对象数据类型的值进行返回(不用本身手动的return返回了)

三、把浏览器默认建立的那个对象当作当前函数执行的总体(this)而后经过this。XXX这种方式给默认建立的对象添加属性和属性值

浏览器默认建立的这个对象其实就是咱们当前类的一个实例

在构造函数模式建立一个类的时候,方法执行,里面的this其实就是咱们当前类的一个实例

function SayHello(name){
this.name = name;

  this.say = function(){
    alert("Hello"+this.name)
  };
}

var p1 = new SayHello("张松“);
p1.say();//类都是函数数据类型的
//console.log(typeof CreateJsPerson);//-->"function"
//类建立出来的实例都是对象数据类型的
//console.log(typeof p1);//-->"object"

 

四、原型模式

// 首先须要构造函数, 原则就是将独有的属性和方法放在 对象中
    function Person ( name, age, gender ) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

将共享的方法放到默认的 .prototype 原型中,而独有的数据与行为放到对象中

 // 将共享的方法提取出来
    Person.prototype.sayHello = function () {
        console.log( '你好, 我是 ' + this.name );
    };
    Person.prototype.eat = function () {
        console.log( this.name + '在吃饭' );
    };
 
    Person.prototype.run = function () {
        console.log( this.name + '在跑步. 已经跑了 ' + this.age + ' 年' );
    };
 
    // 直接给原型对象添加成员
    var p1 = new Person( 'lilei', 19, '男' );
    var p2 = new Person( 'hanmeimei', 18, '女' );
相关文章
相关标签/搜索