1. 程式人生 > >js中的函式形式

js中的函式形式

在js中的函式形式的種類

  1、普通函式  function  fn(){ }、var  fn=function()

  2、類

物件    object

  物件裡面的資料以鍵值對的形式存在,跟json一樣

  1、單例模式 

 

       "name" : "zhangsan"

       "age" : 23

    }

    var li={

      "name" : "lisi"

      "age" : 24

    }

   我們把變數zhang和li叫做“名稱空間”

    優勢:每個物件都是對立的,即便屬性器的名字一樣,不會相互干擾,方便現在流行的開發模式“模組化開發”,如果使用裡面的屬性,用運算付,如 zhang . name或 zhang [ "name" ];判斷一個屬性是不是這個物件的用in 運算子如"name" in zhang;如果遍歷這個物件用for (attr in zhang)

    缺點:不可以批量生產,只能一個一個的去建立

  2、工廠模式

    function  Cteateyifu (name,age){

        var  obj ={

          "name":name

          "age":age

            }

          return   obj

        }

    var  zhang=Createyifu("張三",23)

    var  lisi=Createyifu("李四",24)

    console . log (lisi)

    這種形式我們叫做函式封裝

   優勢:可以批量生產,減少冗餘的程式碼,提高程式碼的重複利用率

   缺點:沒有繼承和多型

  3、建構函式

    要求:(1)、函式名首字母必須大寫

       (2)、裡面的屬性必須加this

       (3)、函式呼叫的時候必須使用new關鍵字

    function    person    (name,age){

            this . name=name;

            this . age=age;

            }

          var    zhang=new person ("張三",26)

          console . log(zhang)

    我們把person叫類,把zhang叫例項,萬物皆物件,物件的特徵有屬性和方法

    建構函式裡的this指向例項物件。

    例項識別:

    建構函式裡有了類和例項的概念,並且例項和例項都是獨立的個體,我們把它叫例項識別

    建構函式裡面的屬性都是私有的,各個例項物件之間沒有公共的屬性。

    為了例項的物件擁有公共的屬性,所以js使用了prototype(原型)這個屬性,屬性值是一個物件,我們可以把公共的屬性放在這個prototype上了

   原型分析:

  (1)、每個函式資料型別(普通函式、類)都有一個prototype 屬性 ,並且這個屬性都是一個物件資料型別

  (2)、每一個prototype 上都有一個constructor 屬性,並且這個屬性值是當前函式本身或類的本身

  (3)、每一個物件資料型別(例項,普通函式、prototype)都天生具有一個__proto__ 屬性,他的屬性值是當前例項所屬類的原型

  原型鏈:

  物件 . 屬性的時候,首先看這個屬性是不是私有的,私有的就直接使用,如果私有的屬性沒有,就找公有的,公有的有就使用,沒有就按照__proto__ 找它的類上有沒有,直到找到基類Object 。如果Object沒有就是undefined 。這種機制叫原型鏈