1. 程式人生 > >js中期總結11月1日 javascript物件講解

js中期總結11月1日 javascript物件講解

javascript物件講解

  js的資料型別

  基本資料型別:string   undefined   null   boolean    number

  引用資料型別:object

  二者的區別:

  基本資料型別就是簡單的賦值,引用資料型別就是把記憶體地址賦值給變數

  案例      var a=123

      var b={

      "name":"zhang"

      }

      var c=["ni",23]

      var d=function(){

        console.log(12)

      }

    console.log(a)

  解析:

    

  堆記憶體:

    就是存放程式碼塊,存放形式有兩種,一種是物件以鍵值對的形式存放,另一種是函式以字串的形式存放

  引用資料型別的賦值是把引用地址賦給它,在修改屬性的時候通過地址查詢,然後改掉

  案例:

  var obj1={

    "name":"zhangsan"

    }

  var obj2=obj1

  obj2.name="lisi"

  console.log(obj1)             結果為lisi

  解析:

  

  引用資料型別:將記憶體地址賦給他,想要修改屬性通過地址查詢,然後進行修改

  var arr1=[12,56]

  var arr2=arr1

  arr2[0]="lisi"

  console.log(arr1)                     其結果為lisi,56   陣列也屬於物件型別

  this 研究函式的內部

  在js中函式形式的種類

  1.普通的函式     2.類函式

  物件學習。object

  物件裡面資料型別以鍵值對形式存在

  資料的三種儲存方式

  string       " "

  array       [ ]

  json        { }

  object跟json不一樣

  引用資料型別如何操作

  1.先通過引用地址去查詢堆記憶體中的程式碼,然後再去修改

  作用域和記憶體空間的區別?

  作用域是函式執行的時候產生的fn()函式執行的時候會開闢一個新的記憶體空間叫棧記憶體(環境或作用域)。

  資料型別在賦值的時候會開闢一個新的記憶體空間叫堆記憶體(存放程式碼塊)。

  相同點:兩者都會形成一個記憶體地址

  單列模式:(就是簡單的變數宣告)

  var zhang={                            (提示:我們把變數zhang叫名稱空間)

    "name":"zhangsan",

    "age":23

    }

  生成物件的單列模式,每個物件都是獨立的即便屬性起的名字一樣,也不會相互干擾,方便現在流行的開發模式“模組化開發”,如果需要使用裡面的屬性用"."運算子如(zhang.name)或      (zhang["name"]),判斷一個屬性是不是這個物件的用in運算,如"name" in zhang   如果遍歷這個物件用for in   for(attr in zhang){}

  案列:(3中寫法)

  var li={

    "name":"lisi",

    "age":24,
    "text":"我不入地獄,誰入地獄"

  }             (標準流)推薦

  var obj=new Object()

  obj.name="cui",

  obj.age=26            (原型)

  var obj={}  

  obj.name="zhang",

  obj.age=27          (簡寫)

  console.log(li.text)

  console.log("name" in li)

  for(var attr in li){

    console.log(li[attr])

    }

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

  所以就會出現另一種模式:工廠模式(可以批量生產)

  2.工廠模式

  案例:

  function createyifu(name,age){

    var obj={

      "name":name,

      "age":age

    }

    return obj

  }

  var zhang=createyifu("張三",23);

  var li=creatyifu("李四",22);

  console.log(lisi)

  這種形式叫函式封裝,

  優勢:可以批量生產,減少程式碼冗餘,提高程式碼的重複利用率(高密度,低耦合)

  缺點:沒有繼承和多型

  所有的程式語言

  java   c    python     c++.......         都是面對物件的程式設計

  面對物件必須有3大特點

  封裝      繼承       多型

  所以有出來一種模式,將是最常用的

  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叫實列 (具體到某個)

  萬物皆物件:物件的特徵有屬性(特徵)和方法(能做什麼)

  字串類是String

  陣列的類是Array

  物件的類是Object    (被稱為基類,最大的類,所有的類都可以叫基類)

  

  var zhang為物件實列

  建構函式裡的this指向實列物件

  誰呼叫它,this就指向他的實列物件

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

  建構函式裡面的屬性都是私有的,各個實列之間都沒有公共屬性

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

  

  原型分析:

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

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

  3.每一個物件資料型別(實列,普通物件,prototype)都天生具有一個__proto__屬性他的屬性值是當前實列所屬的原型(告訴你來自於哪個類)

  類(函式資料)     實列(物件型別)

  遇到原型就替換掉

  object(基型   沒有原型)

  原型鏈:

  object . attribute 的時候,首先看這個屬性是不是私有的,私有的直接使用,如果私有的屬性沒有就找公有的,如果公有的有就直接使用,沒有就按照__proto__找他的類上有沒有,直到找到基類object,如果object沒有就undefined了,這種查詢機制叫原型鏈

  原型的this要找到原型是誰,然後替換掉this再去查詢

  function Person(name,age){

    this.name=name,

    this.age=age

    }

  Person.prototype={

    xx:"hello world",

    say:function(){

      console.log(123)

      }

    }

  var zhang=new Person("zhangsan",23);

  var li=new Person("lisi",20);

  console.log(li)

  解析:

  

 

  

 

  

  js的資料型別

  基本資料型別:string   undefined   null   boolean    number

  引用資料型別:object

  二者的區別:

  基本資料型別就是簡單的賦值,引用資料型別就是把記憶體地址賦值給變數

  案例      var a=123

      var b={

      "name":"zhang"

      }

      var c=["ni",23]

      var d=function(){

        console.log(12)

      }

    console.log(a)

  解析:

    

  堆記憶體:

    就是存放程式碼塊,存放形式有兩種,一種是物件以鍵值對的形式存放,另一種是函式以字串的形式存放

  引用資料型別的賦值是把引用地址賦給它,在修改屬性的時候通過地址查詢,然後改掉

  案例:

  var obj1={

    "name":"zhangsan"

    }

  var obj2=obj1

  obj2.name="lisi"

  console.log(obj1)             結果為lisi

  解析:

  

  引用資料型別:將記憶體地址賦給他,想要修改屬性通過地址查詢,然後進行修改

  var arr1=[12,56]

  var arr2=arr1

  arr2[0]="lisi"

  console.log(arr1)                     其結果為lisi,56   陣列也屬於物件型別

  this 研究函式的內部

  在js中函式形式的種類

  1.普通的函式     2.類函式

  物件學習。object

  物件裡面資料型別以鍵值對形式存在

  資料的三種儲存方式

  string       " "

  array       [ ]

  json        { }

  object跟json不一樣

  引用資料型別如何操作

  1.先通過引用地址去查詢堆記憶體中的程式碼,然後再去修改

  作用域和記憶體空間的區別?

  作用域是函式執行的時候產生的fn()函式執行的時候會開闢一個新的記憶體空間叫棧記憶體(環境或作用域)。

  資料型別在賦值的時候會開闢一個新的記憶體空間叫堆記憶體(存放程式碼塊)。

  相同點:兩者都會形成一個記憶體地址

  單列模式:(就是簡單的變數宣告)

  var zhang={                            (提示:我們把變數zhang叫名稱空間)

    "name":"zhangsan",

    "age":23

    }

  生成物件的單列模式,每個物件都是獨立的即便屬性起的名字一樣,也不會相互干擾,方便現在流行的開發模式“模組化開發”,如果需要使用裡面的屬性用"."運算子如(zhang.name)或      (zhang["name"]),判斷一個屬性是不是這個物件的用in運算,如"name" in zhang   如果遍歷這個物件用for in   for(attr in zhang){}

  案列:(3中寫法)

  var li={

    "name":"lisi",

    "age":24,
    "text":"我不入地獄,誰入地獄"

  }             (標準流)推薦

  var obj=new Object()

  obj.name="cui",

  obj.age=26            (原型)

  var obj={}  

  obj.name="zhang",

  obj.age=27          (簡寫)

  console.log(li.text)

  console.log("name" in li)

  for(var attr in li){

    console.log(li[attr])

    }

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

  所以就會出現另一種模式:工廠模式(可以批量生產)

  2.工廠模式

  案例:

  function createyifu(name,age){

    var obj={

      "name":name,

      "age":age

    }

    return obj

  }

  var zhang=createyifu("張三",23);

  var li=creatyifu("李四",22);

  console.log(lisi)

  這種形式叫函式封裝,

  優勢:可以批量生產,減少程式碼冗餘,提高程式碼的重複利用率(高密度,低耦合)

  缺點:沒有繼承和多型

  所有的程式語言

  java   c    python     c++.......         都是面對物件的程式設計

  面對物件必須有3大特點

  封裝      繼承       多型

  所以有出來一種模式,將是最常用的

  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叫實列 (具體到某個)

  萬物皆物件:物件的特徵有屬性(特徵)和方法(能做什麼)

  字串類是String

  陣列的類是Array

  物件的類是Object    (被稱為基類,最大的類,所有的類都可以叫基類)

  

  var zhang為物件實列

  建構函式裡的this指向實列物件

  誰呼叫它,this就指向他的實列物件

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

  建構函式裡面的屬性都是私有的,各個實列之間都沒有公共屬性

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

  

  原型分析:

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

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

  3.每一個物件資料型別(實列,普通物件,prototype)都天生具有一個__proto__屬性他的屬性值是當前實列所屬的原型(告訴你來自於哪個類)

  類(函式資料)     實列(物件型別)

  遇到原型就替換掉

  object(基型   沒有原型)

  原型鏈:

  object . attribute 的時候,首先看這個屬性是不是私有的,私有的直接使用,如果私有的屬性沒有就找公有的,如果公有的有就直接使用,沒有就按照__proto__找他的類上有沒有,直到找到基類object,如果object沒有就undefined了,這種查詢機制叫原型鏈

  原型的this要找到原型是誰,然後替換掉this再去查詢

  function Person(name,age){

    this.name=name,

    this.age=age

    }

  Person.prototype={

    xx:"hello world",

    say:function(){

      console.log(123)

      }

    }

  var zhang=new Person("zhangsan",23);

  var li=new Person("lisi",20);

  console.log(li)

  解析: