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

關係或能力,這兩個標準都被使用

Barbara Streisand
發布: 2024-10-07 06:22:29
原創
741 人瀏覽過

Relationship or ability, both of these criteria are used

在社會上,評估一個人的能力和價值時,往往有兩種不同的標準:一是“以關係”,二是“以能力”。這兩種標準都體現在不同的文化、產業和個人價值觀中,各有其支持者和反對者。

在程式語言中,有兩種​​標準以不同的方式組織程式碼,將資料結構連結到函數。本文將簡要討論這兩個通用標準的應用和作用原理。

類別模型

在Javascript語言中,提供了class關鍵字,我們可以用它來定義類別。重要的是,類別是可擴展的,當在實例上呼叫方法時,它們會按照原型鏈的順序查找方法定義。例如:


class Animal {
    move() { return 'move' }
}
class Monkey extends Animal {
    jump() { return 'jump' }
}
class Human extends Monkey {
    write() { return 'write' }
}


登入後複製

extends 關鍵字可以幫助我們定義一個從其他類別擴展的新類別。我們可以得到這樣的原型鏈:


let me = new Human()
let proto = me.__proto__
let r = []

while (proto !== null) {
    r.push(proto.constructor.name)
    proto = proto.__proto__
}


登入後複製

我們會得到這樣的 r:['Human', 'Monkey', 'Animal', 'Object']。當我們呼叫一個方法時,該方法呼叫是否成功取決於原型鏈上是否有對應的定義。例如你呼叫me.move(),它在Animal類別有定義,呼叫成功。

這就是類別模型,我喜歡稱之為「關係」模型,只要在實例本身的類別中定義就可以調用,或者在父類別、祖父母類別等中定義上。

基於能力的模型

與基於關係的模型相比,基於能力的模型要簡單得多。只要實例滿足某種特質,無論實例之間的關係為何,對應的方法都可以作用於實例。


let me = {
    moveable: true,
    freezable: false
}

function move(x) { return x.moveable ? 'move' : undefined }
function freeze(x) { return x.freezable ? 'freeze' : undefined }


登入後複製

在這個模型中,資料和方法是相互獨立的。優點是簡潔明了,但缺點也很明顯,因為方法和資料的獨立性,很難重寫方法定義。

概括

介紹完資料結構和方法的兩種連接方式後,我們可以想到,當需要根據資料的類別來實作同名不同功能的方法時,建議使用關係類別模型。當方法通常相對固定,而資料是多變的,並且相同的方法適用於不同的資料時,可以使用基於能力的模型。

以上是關係或能力,這兩個標準都被使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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