В обществе при оценке способностей и ценности человека часто существует два разных критерия: один «основан на отношениях», а другой «основан на способностях». Оба стандарта воплощены в разных культурах, отраслях и личных ценностях, каждый из которых имеет своих сторонников и противников.
В языках программирования существует два типа стандартов, которые организуют код по-разному, связывая структуры данных с функциями. В этой статье кратко обсуждается применение и принцип действия этих двух общих стандартов.
В языке 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 вот так: ['Человек', 'Обезьяна', 'Животное', 'Объект']. Когда мы вызываем метод, успех вызова метода зависит от того, есть ли соответствующее определение в цепочке прототипов. Например, если вы вызываете 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 }
В этой модели данные и методы независимы друг от друга. Преимущество в том, что оно краткое и простое, но недостаток очевиден: из-за независимости метода и данных его определение трудно переопределить.
После представления двух способов соединения структур данных и методов мы можем подумать, что когда необходимо реализовать методы с разными одноимёнными функциями в соответствии с классом данных, рекомендуется использовать модель реляционного класса. . Когда метод обычно относительно фиксирован, а данные изменяемы и один и тот же метод работает с разными данными, можно использовать модель, основанную на компетенциях.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3