javascript類的創建與實例對象

面向對象的語言有一個標誌,那就是他們都有類的概念,通過類可以創建任意多個具有相同屬性和方法的對象。但是在ECMAScript中沒有類的概念(這裏不涉及ES6),但是我們可以通過其他方式來模擬面向對象的類。

面嚮對象語言中類的概念:

var obj = new Object(); // var obj = {};
obj.name = 'z3';
obj.sex  = '男';
obj.sayName = function(){alert('我是張三!')};

如何通過類來創建實例對象,這裏有兩種簡單方式:

  1. 工廠模式

    function createPerson(name , sex , age){
    var obj = new Object();
    obj.name = name ; 
    obj.sex = sex ;
    obj.age = age ;
    obj.sayName = function(){
        alert(this.name);
    }
    return obj;
    }
    var p1 = createPerson('z3' , '男' , 20);
    var p2 = createPerson('z4' , '女' , 25);
    //alert(p1.sex);
    p1.sayName();
  2. 構造函數的方式

    // 函數的第一個字母大寫 (類的模版)
    function Person(name , age , sex){
    this.name = name ;
    this.age  = age ; 
    this.sex  = sex ;
    this.sayName = function(){
        alert(this.name);
    }
    }
    //構造一個對象 new關鍵字 傳遞參數 執行模版代碼 返回對象
    var p1 = new Person('小1' , 20 , '男');
    var p2 = new Person('小2' , 21 , '女');
    //alert(p1.name);
    //p1.sayName();
    //alert(p1 == p2); //false  類的概念:根據模版創建出不同的實例對象 
    //alert(p1.constructor == Person);  //true
    //alert(p2.constructor == Person);  //true
    alert(p1 instanceof Person);    //true
    alert(p1 instanceof Object);    //true

創建對象的幾種方式:

  1. 當做構造函數去使用

    var p1 = new Person('小1' , 20 , '男');
  2. 作爲普通的函數去調用

    //在全局環境裏定義屬性並賦值,Person裏的this永遠指向調用該函數的對象,也就是全局window中的變量
    Person('小2' , 25 , '男');
  3. 在另一個對象的作用域中調用

    var o = new Object();  
    // call  applly
    Person.call(o,'小4' , 12 , '女');
發佈了85 篇原創文章 · 獲贊 12 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章