再記面向對象

再記面向對象

函數和對象的聯繫

先理一下函數的功能:es6

  1. 建立:能夠經過字面量建立
  2. 能夠賦值給變量、數組做爲成員和其餘的對象做爲屬性
  3. 做爲函數的參數
  4. 做爲返回值
  5. 自身能夠添加屬性

在上面列出的函數功能對象皆具備數組

詳細函數介紹

爲何介紹函數?

由於閉包、面向對象都須要與其有關,而且函數對於JavaScript的重要性則是無與倫比閉包

函數建立的幾種方法:

  • 函數定義: 函數聲明和函數表達式(回調函數與其關係)
  • 箭頭函數: es6增長(注意箭頭函數的this)
  • 函數構造函數:new function ('a','b','return a+b');
  • 生成器函數:
  1. 函數聲明和函數表達式函數

    函數聲明:學習

    • 函數聲明用function 開頭,而且函數名爲強制存在,參數名可選,函數體用大括號{}包起來。
    function square(number) {
        return number * number;
        }

注意函數名必須存在,這樣才能夠被其餘地方進行調用。函數能夠在函數裏聲明 ,[閉包]()與此有關。this

函數表達式:spa

  • 函數表達式則是能夠被用來做爲參數、做爲返回值。能夠快速的被建立使用。prototype

    var fn = function() {
      console.log("hello world")
    }
    
    fn()
    
    function outPut (callback) {
      callback()
    }
    
    outPut(fn)

    函數名不是必須的code

  1. 箭頭函數對象

    function getName (name) {
      return (function(j) {
       return j
      })(name)
    }
    
    var showName = getName("kangkang")
    
    console.log(showName)

    下面改寫爲箭頭函數形式

    function getName (name) {
      return (j=>j)(name)
    }
    
    var showName = getName("kangkang")
    
    console.log(showName)

遵循 參數=>被返回的表達式的值(p,b)=>p+b至關於function(p,b){return p+b},也可使用代碼塊進行必要的操做,此時須要顯示代表return的值。

調用函數:

  • 函數的調用,定義一個函數並不會執行它,須要調用。在調用時,你須要給定可選的參數,若是參數爲空則無需給定。函數聲明的提高可讓函數不在頂層被聲明。

    一個須要注意的地方 函數提高僅適用於函數聲明,而不適用於函數表達式。

  • 具體函數的調用在this上的改變使人捉摸不透,我也寫了篇筆記 [this什麼時候爲什麼值?]()待添加

原型鏈:

每一個對象(函數)具備一個原型屬性,指向能夠被實例共享的屬性和方法。而原型鏈在尋找某個屬性時體現的比較清楚:

function one () {
  this.value = 1
}
one.prototype.output = function() {
  console.log(this.value)
}

function two () {
  this.value = 2
}

function three () {
  this.value = 3
}

two.prototype = Object.create(one.prototype)
three.prototype = Object.create(two.prototype)

var one1 = new one()
var two1 = new two()
var three1 = new three()

three1.output()
// 對於three1來講並無output這個方法,就是經過原型鏈這個鏈進行一層一層尋找的

重寫對象原型引發的問題

  • 在構造函數建立新的實例後依然能夠添加新的原型屬性和方法而且能夠被訪問到,可是若是重寫整個原型對象的話,就須要注意了。實例對象與構造函數的原型聯繫是在建立實例時肯定的,當建立後更改原型對象並不改變以前建立的實例所關聯的原型對象,新建立的使用新的原型對象。

  • constructor屬性指向建立實例的函數

我的學習備忘,若有謬誤,歡迎指正。

相關文章
相關標籤/搜索