[概念] javascript構造函數和普通函數的


[概念] javascript構造函數和普通函數的

javascript構造函數和普通函數的區別是什么:

  1. 調用方式的區別:
    1. 構造函數需要使用new運算符調用,如果構造函數沒有參數可以省略小括號,比如new Object。
    2. 普通函數的調用不需要new運算符,而且必須要有小括號。 關於new的作用可以參閱js的new運算符的作用簡單介紹一章節。
  2. this的指向問題:
    1. 構造函數的this會被綁定到創建的對象實例上。
    2. 普通函數的this則屬於此函數的調用者。
  3. 命名方式:
    1. 構造函數名稱通常首字母要大些。
    2. 普通函數名稱首字母要小寫,使用駝峰命名方式。 構造函數

使用構造器創建對象

在 JavaScript 中,構造器其實就是一個普通的函數。當使用 new 操作符 來作用這個函數時,它就可以被稱為構造方法(構造函數)。

我的理解:構造函數 就是 類了。 構造函數的 原型 可 擴展 實例化 后 的 方法。 構造函數只有在被new操作符調用的時候才能稱之為構造函數。其它時候,它就是一個普通函數。這樣構造函數的特殊性還不如說是 new 操作符的 作用 —— 創建對象,並返回對象本身。

通過構造函數 創建的 對象 與 普通的 var object = {} 應該是沒區別的吧。

JavaScript中的普通函數與構造函數

與普通函數相比,構造函數有以下明顯特點

  1. 用new關鍵字調用 var prince=new Prince("charming",25);
  2. 函數內部可以使用this關鍵字
    在構造函數內部,this指向的是構造出的新對象。用this定義的變量或函數/方法,就是實例變量或實例函數/方法。需要用實例才能訪問到,不能用類型名訪問。 prince.age;//25 Prince.age;//undefined
  3. 默認不用return返回值 構造函數是不需要用return顯式返回值的,默認會返回this,也就是新的實例對象。當然,也可以用return語句,返回值會根據return值的類型而有所不同,細節將在下文介紹。
  4. 函數命名建議首字母大寫,與普通函數區分開。 不是命名規范中的,但是建議這么寫。

使用new關鍵字實例化的時候發生了什么?

以上文中的Prince()函數舉個栗子:

  1. 第一步,創建一個空對象。 var prince={}
  2. 第二步,將構造函數Prince()中的this指向新創建的對象prince。
  3. 第三步,將prince的_proto_屬性指向Prince函數的prototype,創建對象和原型間關系
  4. 第四步,執行構造函數Prince()內的代碼。

構造函數有return值怎么辦?

構造函數里沒有顯式調用return時,默認是返回this對象(這個時候,必須要 使用new關鍵字來調用吧),也就是新創建的實例對象。 當構造函數里調用return時,分兩種情況:

  1. return的是五種簡單數據類型:String,Number,Boolean,Null,Undefined。 這種情況下,忽視return值,依然返回this對象。

  2. return的是Object 這種情況下,不再返回this對象,而是返回return語句的返回值。

    function Person(name){
        this.name=name;
        return {name:"cherry"}
    }
    var person=new Person("sheila");
    person.name;//cherry
    person;//Object {name: "cherry"}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM