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, '女' );
相關文章
相關標籤/搜索