天天看點

JavaScript面向對象

JavaScript面向對象

定義一個函數,傳回這些屬性,就猶如C#中對函數封裝一樣,我們可以對這個函數進行封裝。

一.原型鍊

function Person(n,a){
    return {
        name : n , 
        age :  a
    }
}
Person.prototype.abc=function(){
    console.log("兒子");
}
let person = new Person('張子浩',20);
console.log(person.name);
Person.prototype.abc();      

二.Class類

ES6和ES5中有非常多的不相似點,我們慢慢思考

class DBHelper {
    constructor() {}
    getdate () {
        return new Date();
    }
}
// 導出内容
// export default DBHelper = DBHelper;  // ES6 
module.exports = DBHelper;              // ES5      

通過 module.exports 可以進行公開内容  差不多就pubic。

在第二個class中

// import ZZH from './lei2.js'; // ES6
var ZZH = require('./lei2'); // ES5   require.js
// 在 JS 中 所有的 類 都可以看成是 object 的 子類。
class Person{
    // 構造函數
    constructor(n,a){
        this.name = n;
        this.age= a;
    } 
    abc(){
        console.log('hehe');
    }
}      

通過constructor關鍵字可以寫構造函數,我們還可以在類中寫其他的方法.

其中require關鍵字是可以引用别的lei  差不多就是new關鍵字   路徑可以是絕對路徑和相對路徑,我們就可以去調用ZZH中的函數了

 三.類的繼承

// 類的繼承
class Student extends Person{

}
      

let person = new Person('張子浩',20);

console.log(person.name);

let stu = new Student('張建晗',20);

console.log(stu.name);

console.log(typeof (person)); // object

console.log(typeof (stu)); // object

// 擷取對象的 構造函數

console.log(person.constructor);

console.log(stu.constructor);

類的繼承可以通過extends關鍵字,值得思考的是兩者的類型都是object,擷取對象的構造函數可以通過constructor