首頁 > web前端 > js教程 > 主體

JS如何實作物件導向程式設計? js物件導向程式設計的原理介紹

不言
發布: 2018-08-18 16:53:14
原創
3565 人瀏覽過

本篇文章帶給大家的內容是關於JS如何實現物件導向程式設計? js物件導向程式設計的原理介紹,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

1、物件導向程式設計是什麼

它是用抽象的方式創建基於現實世界模型的程式模式(將資料和程式指令組合到物件中)

# 2.物件導向程式設計的目的

在程式設計中促進更好的靈活性和可維護性,在大型軟體工程中廣為流行。

3、物件導向程式設計的優勢(繼承、多型、封裝)

繼承:取得父類別的全部(資料和功能),實現的是複製。
多型態:根據實作方法的對象,相同方法名稱有不同的行為。
封裝:聚合物件資料和功能,以及限制它們和外界的聯繫(存取權限)。

JS中如何實作物件導向程式設計(參考)

1、原型鍊式繼承

function Person() {
    this.name = 'per'
    this.obj = {
        name: ''
    }
}
Person.prototype.getName = function() {
    return this.obj.name
}
Person.prototype.setName = function(name) {
    this.name = name
    // 引用类型的赋值会同步给所有子类
    this.obj.name = name
}
function Student() {
    
}
Student.prototype = new Person()

const stu1 = new Student()
const stu2 = new Student()

stu1.setName('stu')
stu1.getName()
stu2.getName()
登入後複製
缺點:引用型別修改時會同步給所有子類別

2、建構子繼承

function Person() {
    this.obj = {
        name: 'a'
    }
    this.setName = name => {
        this.obj.name = name
    }
    this.getName = () => {
        return this.obj.name
    }
}
function Student() {
    Person.call(this)
}
const stu1 = new Student()
const stu2 = new Student()
stu1.setName('stu')
stu1.getName()
stu2.getName()
登入後複製
缺點:父類別的函式在子類別下面是不共享的,相當於動態的複製了一份程式碼

3、組合繼承

function Person() {
    this.obj = {
        name: 'a'
    }
}
Person.prototype.getName = function() {
    return this.obj.name
}
Person.prototype.setName = function(name) {
    this.name = name
    // 引用类型的赋值会同步给所有子类
    this.obj.name = name
}
function Student() {
    // 继承属性
    Person.call(this)
}
// 继承方法
Student.prototype = new Person()
登入後複製
缺點:父類別內的屬性複製執行了兩遍

4、寄生組合式繼承

function Person() {
    this.obj = {
        name: 'a'
    }
}
Person.prototype.getName = function() {
    return this.obj.name
}
Person.prototype.setName = function(name) {
    this.name = name
    // 引用类型的赋值会同步给所有子类
    this.obj.name = name
}
function Student() {
    // 继承属性
    Person.call(this)
}
// 这里实现方法的继承
function inherit(sub, parent) {
    sub.prototype = Object.create(parent.prototype)
    sub.prototype.constructor = sub       
}
inherit(Student, Person)
登入後複製
這裡解決了組合式繼承的父類別程式碼二次執行問題

5、class實作繼承(參考)

class Person {
    constructor(){
        this.obj = {
            name: 'a'
        }
    }
    get name() {
        return this.obj.name
    }
    set name(name) {
        this.obj.name = name
    }
}
class Student extends Person {
    constructor() {
        super()
    }
}
登入後複製

相關推薦:

js物件導向 多種建立物件方法小結_js面向物件

javascript物件導向程式碼_js物件導向

#

以上是JS如何實作物件導向程式設計? js物件導向程式設計的原理介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!