一篇文章帶你了解JavaScript中的面向 「對象」

file

作者 | Jeskson

來源 | 達達前端小酒館

安裝webpack,打包工具,安裝webpack-dev-server,安裝babel解析es6語法,初始化npm環境。

npm install webpack webpack-cli --save-dev

webpack.dev.config.js

module.exports = {   entry: './src/index.js',   output: {    path: __dirname,    filename: './release/bundle.js'   }  }

index.js

class Person {   constructor(name) {    this.name = name   }   getName() {    return this.name   }  }  let p = new Person('dada')  console.log(p.getName());

什麼是面向對象?

面向對象的三要素:繼承,封裝,多態。

// 類  class People {   constructor(name, age) {    this.name = name;    this.age = age;   }   eat() {    console.log('eat');   }   speak() {    console.log('speak');   }  }

對象(實例)

// 創建實例  let dada = new People('dada', 12);  dada.eat();  dada.speak();    // 創建實例  let tudi = new People('da1', 12);  tudi.eat();  tudi.speak();

繼承,子類繼承父類,封裝,數據的權限和保密,多態,同一接口不同實現。

繼承的案例,父類

// 父類  class People {   constructor(name,age) {    this.name = name    this.age = age   }   eat() {    console.log('eat');   }   speak() {    console.log('speak');   }  }

子類繼承父類

class Student extends People {   constructor(name, age, number) {    super(name, age);    this.number = number;   }   study() {    console.log('study');   }  }

實例

let dada = new Student('dada',12,'web');  dada.study();  console.log(dada.number);  dada.eat();

父類是公共的,不僅服務與一個子類,繼承可以將公共方法抽離出來,提高代碼的復用性,減少多餘的代碼重複。

封裝

public 完全開放,protected 對子類開放,private 對自己開發

父類

class People {   name   age   protected weight   constructor(name, age) {    this.name = name    this.age = age    this.weight = 12   }   eat() {    console.log('eat');   }   speak() {    console.log('speak');   }  }
class Student extends People {   number   private girlfriend   constructor(name, age, number) {    super(name, age, number) {     super(name, age)     this.number = number     this.girlfriend = 'dada'    }    study() {     console.log('study');    }    getWeight() {     console.log('getWeight');    }   }  }

減少耦合,不該外露的不外露,利於數據,接口的權限管理。

多態

class People {   constructor(name) {    this.name = name   }   saySomething() {   }  }    class A extends People {   constructor(name) {    super(name);   }   saySomething() {    console.log('dada');   }  }
class B extends People {   constructor(name) {    super(name)   }   saySomething() {    console.log('da1');   }  }    let a = new A('a');  a.saySomething();    let b = new B('b');  b.saySomething();

JS應用案例

class jQuery {   constructor(selector) {    let slice = Array.prototype.slice    let dom = slice.call(document.querySelectorAll(selector))    let len = dom ? dom.length : 0    for(let i=0; i<len; i++){     this[i] = dom[i]    }    this.lenght = len;    this.selector = selector || ''   }   append(node){   }   addClass(name){   }   html(data){   }  }
window.$ = function(selector) {   return new jQuery(selector)  }    var $p = $('p');  console.log($p)  console.log($p.addClass);

index.js

class jQuery {   // jquery如何使用面向對象   constructor(selector) {    let slice = Array.prototype.slice    let dom = slice.call(document.querySelectorAll(seletor))    let len = dom ? dom.length : 0    for(let i=0; i<len; i++){     this[i] = dom[i]    }    this.length = len    this.seletor = seletor || ''   }   append(node) {   }   addClass(name) {   }   html(data){   }  }  window.$ = function(selector){   return new jQuery(selecor)  }

在博客平台里,未來的路還很長,也希望自己以後的文章大家能多多支持,多多批評指正,我們一起進步,一起走花路。

非常感謝讀者能看到這裡,如果這個文章寫得還不錯,覺得「達達」我有點東西的話,覺得我能夠堅持的學習,覺得此人可以交朋友的話, 求點贊? 求關注❤️ 求分享? 對暖男我來說真的

非常有用!!!

❤️ 不要忘記留下你學習的腳印 [點贊 + 收藏 + 評論]

作者Info:

【作者】:Jeskson 【原創公眾號】:達達前端小酒館。 【福利】:公眾號回復 「資料」 送自學資料大禮包(進群分享,想要啥就說哈,看我有沒有)! 【轉載說明】:轉載請說明出處,謝謝合作!~

大前端開發,定位前端開發技術棧博客,PHP後台知識點,web全棧技術領域,數據結構與算法、網絡原理等通俗易懂的呈現給小夥伴。謝謝支持,承蒙厚愛!!!


若本號內容有做得不到位的地方(比如:涉及版權或其他問題),請及時聯繫我們進行整改即可,會在第一時間進行處理。


請點贊!因為你們的贊同/鼓勵是我寫作的最大動力!

歡迎關注達達的CSDN!

這是一個有質量,有態度的博客

前端技術棧