中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript怎么創建類和對象

發布時間:2022-03-15 17:35:17 來源:億速云 閱讀:192 作者:iii 欄目:web開發

這篇文章主要介紹了JavaScript怎么創建類和對象的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇JavaScript怎么創建類和對象文章都會有所收獲,下面我們一起來看看吧。

1 JS 面向對象

1.1 面向對象編程介紹

面向過程編程

即POP(Process-oriented programming),面向過程就是分析出解決問題所需要的步驟,然后用函數把這些步驟一步一步實現,使用的時候再一個一個的依次調用就可以了。

面向對象編程

即 OOP(Object Oriented Programming) 面向對象是把事務分解成為一個個對象,然后由對象之間分工與合作。在面向對象程序開發思想中,每—個對象都是功能中心,具有明確分工。 面向對象編程具有靈活、代碼可復用、容易維護和開發的優點,更適合多人合作的大型軟件項目。

面向對象的特性: 封裝性,繼承性,多態性

兩者的對比

面向過程:

優點:性能比面向對象高,適合跟硬件聯系很緊密的東西,例如單片機就采用的面向過程編程。

缺點:沒有面向對象易維護、易復用、易擴展。

面向對象:

優點:易維護、易復用、易擴展,由于面向對象有封裝、繼承、多態性的特性,可以設計出低耦合的系統,使系統更加靈活、更加易于維護

缺點:性能比面向過程低。

1.2 ES6 中的類和對象

對象的介紹

在 JavaScript 中,對象是一組無序的相關屬性和方法的集合,所有的事物都是對象,例如字符串、數值、數組、函數等。

對象是由屬性和方法組成的:

屬性:事物的 特征,在對象中用 屬性 來表示(常用名詞)

方法:事物的 行為,在對象中用 方法 來表示(常用動詞)

類 class 的介紹

在 ES6 中新增加了類的概念,可以使用 class 關鍵字聲明—個類,之后以這個類來實例化對象。

類 抽象了對象的公共部分,它泛指某一大類(class)

對象 特指某一個,通過類實例化一個具體的對象

面向對象的思維特點:

抽取(抽象)對象共用的屬性和行為組織(封裝)成—個類(模板)

對類進行實例化,獲取類的對象

創建類和對象

class ClassName {

    // class body

}

// 創建實例:

let obj = new ClassName();

類的 constructor 構造函數

constructor() 方法是類的構造函數(默認方法),用于傳遞參數,返回實例對象,通過new命令生成對象實例時,自動調用該方法。如果沒有顯示定義,類內部會自動給我們創建一個 constructor()

// 創建一個學生類

class Student {

   // 類的構造函數

    constructor(uname, age, major) {

        this.uname = uname;

        this.age = age;

        this.major = major;

    }

   // 類中添加方法

   // 直接在類中寫方法名和括號即可

    sing() {

        console.log(this.uname + "會唱歌");

    }

}

// 類的實例化——創建對象

let peter = new Student("Peter", 21, "CS");

console.log(peter.uname); // Peter

peter.sing(); // Peter會唱歌

注意:

通過 class 關鍵字創建類, 類名我們還是習慣性定義首字母大寫

類里面有個 constructor 函數,可以接受傳遞過來的參數,同時返回實例對象

constructor 函數 只要 new 生成實例時,就會自動調用這個函數, 如果我們不寫這個函數,類也會自動生成這個函數

生成實例 new 不能省略

最后注意語法規范, 創建類:類名后面不要加小括號。生成實例:類名后面加小括號, 構造函數不需要加 function

static 靜態成員

給成員屬性或成員方法添加 static,該成員就成為靜態成員,靜態成員只能由該類調用

class Person {

    static eat() {

        console.log('eat');

    }

}

let  p = new Person();

Person.eat(); // eat

p.eat(); // 報錯

配合 getter 和 setter

當屬性擁有 get/set 特性時,屬性就是訪問器屬性。代表著在訪問屬性或者寫入屬性值時,對返回值做附加的操作。而這個操作就是 getter/setter 函數。

getter : 適用于某個需要動態計算的成員屬性值的獲取

setter 則是在修改某一屬性時所給出的相關提示

class Test {

    constructor(log) {

        this.log = log;

    }

    get latest() {

        console.log('latest 被調用了');

        return this.log;

    }

    set latest(e) {

        console.log('latest 被修改了');

        this.log.push(e);

    }

}

let test = new Test(['a', 'b', 'c']);

// 每次 log 被修改都會給出提示

test.latest = 'd';

// 每次獲取 log 的最后一個元素 latest,都能得到最新數據。

console.log(test.latest);

以上輸出:

latest 被修改了

latest 被調用了

[ 'a', 'b', 'c', 'd' ]

類的繼承

extends 關鍵字 子類繼承父類

super 關鍵字 用于訪問和調用對象父類上的函數,可以調用父類的構造函數,也可以調用父類的普通函數

類里面的 this 指向問題:constructor 里面的 this 指向實例對象, 方法里面的 this 指向這個方法的調用者

class Person {

    constructor (uname, age) {

        this.uname =uname;

        this.age = age;

    }

}

class Student extends Person {

    constructor (uname, age, major) {

        // super 將子類的參數傳遞給父類構造函數,減少代碼量

        super(uname, age);

        // 子類可以有自己獨有的屬性

        this.major = major;

    }

}

let rick = new Student("Rick", 22, "數學");

super 調用父類普通函數

class Parent {

    sayHi() {

        return "Father: hello";

    }

}

class Child extends Parent {

    sayHi() {

        // super 調用父類普通函數  super.sayHi()

        console.log(super.sayHi());

    }

}

let man = new Child();

man.sayHi(); // Father: hello

面向對象案例

類的基本架構:

class Tab {

    constructor(id) {

        // 獲取相關元素節點

        // 根據傳入的id選擇器構建主節點

        this.main = document.querySelector(id);

    }

    // 初始化,綁定各個事件

    init() {}

    // 更新節點,同步整個狀態

    updateNode() {}

    // 1. 切換功能

    toggleTab() {}

    // 2. 添加功能

    addTab() {}

    // 3. 刪除功能

    removeTab() {}

    // 4. 修改功能

    editTab() {}

}

注意的地方:

在 init() 中綁定事件時,不需要即時執行的話,則事件名后面不加括號。

若需要主節點,則聲明一個 that 變量,在 constructor() 里面賦值 that = this。

insertAdjacentHTML() 方法:可以在指定元素的指定位置添加一個節點字符串。(MDN insertAdjacentHTML)

appendChild 不支持追加字符串的子元素,insertAdjacentHTML 支持追加字符串的元素

node 是某一個節點,在其上綁定節點的時候需要提前判斷該節點存在再綁定事件,可使用 node && node.click()。

自動執行某事件而不需要手動觸發,使用 node.click()、node.blur() 等等。

雙擊事件:ondblick。

雙擊禁止選中文字:

window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();

1

雙擊禁止選中文字(CSS做法):user-select: none;

2 構造函數與原型

2.1 構造函數和原型

概述

在典型的 OOP 的語言中(如 Java),都存在類的概念,類就是對象的模板,對象就是類的實例,但在 ES6之前, JS 中并沒用引入類的概念。

ES6, 全稱 ECMAScript 6.0 ,2015.06 發版。但是目前瀏覽器的 JavaScript 是 ES5 版本,大多數高版本的瀏覽器也支持 ES6,不過只實現了 ES6 的部分特性和功能。

在 ES6 之前 ,對象不是基于類創建的,而是用一種稱為 構建函數 的特殊函數來定義對象和它們的特征。

構造函數

在 JS 中,使用構造函數時要注意以下兩點:

構造函數用于創建某一類對象,其首字母要大寫

構造函數要和 new 一起使用才有意義

new 在執行時會做四件事情:

在內存中創建一個新的空對象。

讓 this 指向這個新的對象。

執行構造函數里面的代碼,給這個新對象添加屬性和方法。

返回這個新對象(所以構造函數里面不需要 return)。

靜態成員和實例成員

JS的構造函數中可以添加一些成員,可以在構造函數本身上添加,也可以在構造函數內部的 this 上添加。

通過這兩種方式添加的成員,就分別稱為 靜態成員 和 實例成員。

靜態成員:在構造函數本上添加的成員稱為 靜態成員,只能由構造函數本身來訪問

實例成員:在構造函數內部創建的對象成員稱為 實例成員,只能由實例化的對象來訪問

function Human(uname, age) {

    this.uname = uname;  //實例成員

    this.age = age;  //實例成員

}

Human.x = 10; // 靜態成員

let rick = new Human("rick", 35);

// console.log(rick.x); // 實例化的對象不能調用靜態成員

console.log(Human.x); // 靜態成員只能由構造函數本身來訪問

關于“JavaScript怎么創建類和對象”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“JavaScript怎么創建類和對象”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

龙陵县| 宝应县| 吕梁市| 乡宁县| 伊川县| 香港| 同心县| 广州市| 新巴尔虎右旗| 龙岩市| 四子王旗| 化州市| 三江| 河津市| 徐水县| 屯昌县| 五大连池市| 桂平市| 扶沟县| 建宁县| 将乐县| 三河市| 鄯善县| 会泽县| 饶平县| 汤原县| 皮山县| 恩施市| 江城| 德庆县| 平定县| 海南省| 密山市| 崇州市| 巴林右旗| 修文县| 怀柔区| 宜阳县| 米易县| 鸡西市| 杨浦区|