Function型別

RoOK1E發表於2018-08-15

一、定義函式的三種方式

  1. 函式宣告方式 function a(){}
  2. 定義函式表示式方式 var a = function(){};
  3. 建構函式方式 var a = new Function(...arg,function){} 不推薦,但是指明瞭函式是物件,

二、函式是物件,那麼函式名就是指標,跟包含物件指標的其他變數沒有什麼不同。

三、函式宣告跟定義函式表示式區別

  1. 函式宣告在解析過程中會被函式宣告提前,無論何時呼叫都可以
  2. 定義函式表示式,則必須是執行到當前語句時,才會被執行。此時才可以被呼叫

四、arguments.callee

  1. callee屬性是一個指標,指向擁有這個arguments物件的函式。

五、函式的屬性跟方法

  1. 每個函式都包含的兩個屬性:prototype和length
  2. length:指的是引數個數
  3. prototype:儲存函式所有的例項方法,例如toString()和valueOf()等方法實際上都儲存在prototype名下,只不過通過各自物件例項呼叫而已。 是不可列舉的,所以不能被for in發現
  4. call和apply方法:每個函式都包含這兩個非繼承而來的方法。 他們都是在指定作用域中呼叫函式
  5. toLocalString()和toString()方法和valueOf()都是函式繼承來的。 六、基本包裝型別
  6. 基本包裝型別的存在期只在執行的這一行,這行過去後,就會立馬被銷燬。因此基本包裝型別沒有屬性跟方法
  7. var s = new String("nihao"); typeof(s); //"object" 對 基本 包裝 型別 的 例項 呼叫 typeof 會 返回" object",

建立物件

一、工廠模式:用函式來封裝以特定介面建立物件的細節


    function createPerson( name, age, job){ 
        var o = new Object(); 
        o. name = name; 
        o. age = age; 
        o. job = job; 
        o. sayName = function(){ 
            alert( this. name); 
        }; 
        return o;
    } 
    var person1 = createPerson(" Nicholas", 29, "Software Engineer");   
    var person2 = createPerson(" Greg", 27, "Doctor");  
    console.log(person3.sayName == person4.sayName);  // false
    console.log(person3.constructor == Object); // true
    console.log(person3.constructor == createPerson); // false
複製程式碼

二、建構函式模式

三、原型模式:的 每個 函式 都有 一個 prototype( 原型) 屬性, 這個 屬性 是一 個 指標, 指向 一個 物件, 而這 個 物件 的 用途 是 包含 可以 由 特定 型別 的 所有 例項 共享 的 屬性 和 方法。 如果 按照 字面 意思 來 理解, 那麼 prototype 就是 通過 呼叫 構造 函式 而 建立 的 那個 物件 例項 的 原型 物件。 換句話說, 不必 在 構造 函式 中 定義 物件 例項 的 資訊, 而是 可以 將 這些 資訊 直接 新增 到 原型 物件 中


    function Person(){ } 
    Person. prototype. name = "Nicholas"; 
    Person. prototype. age = 29; 
    Person. prototype. job = "Software Engineer"; 
    Person. prototype. sayName = function(){ 
        alert( this. name); 
    }; 
    var person1 = new Person(); 
    person1. sayName(); //"Nicholas" 
    var person2 = new Person(); 
    person2. sayName(); //"Nicholas"
複製程式碼

四、prototype 跟原型物件之間的關係

Function型別

五、原型模式

  1. 物件例項可以訪問儲存在原型中的值,但是例項物件不能更改原型物件上的值。
  2. 原型 最初 只 包含 constructor 屬性, 而 該 屬性 也是 共享 的, 因此 可以 通過 物件 例項 訪問。
  3. 當 為 物件 例項 新增 一個 屬性 時, 這個 屬性 就會 遮蔽 原型 物件 中 儲存 的 同名 屬性;

相關文章