”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 关系或能力,这两个标准都被使用

关系或能力,这两个标准都被使用

发布于2024-11-08
浏览:970

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 }


在这个模型中,数据和方法是相互独立的。优点是简洁明了,但缺点也很明显,因为方法和数据的独立性,很难重写方法定义。

概括

介绍完数据结构和方法的两种连接方式,我们可以想到,当需要根据数据的类来实现同名不同功能的方法时,推荐使用关系类模型。当方法通常相对固定,而数据是多变的,并且相同的方法适用于不同的数据时,可以使用基于能力的模型。

版本声明 本文转载于:https://dev.to/linjiezhang/relationship-or-ability-both-of-these-criteria-are-used-1dbd?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 如何可靠地检查 JavaScript 中未定义或空变量?
    如何可靠地检查 JavaScript 中未定义或空变量?
    在 JavaScript 中检查未定义或空变量在 JavaScript 中,经常会遇到没有显式赋值的变量或可能未设置的变量。这使得检查未定义或空变量对于维护代码完整性至关重要。条件检查检查未定义或空变量的传统方法涉及使用 typeof 运算符的条件语句和严格相等检查:if (typeof(some_...
    编程 发布于2024-12-23
  • 如何在 PHP 中组合两个关联数组,同时保留唯一 ID 并处理重复名称?
    如何在 PHP 中组合两个关联数组,同时保留唯一 ID 并处理重复名称?
    在 PHP 中组合关联数组在 PHP 中,将两个关联数组组合成一个数组是一项常见任务。考虑以下请求:问题描述:提供的代码定义了两个关联数组,$array1 和 $array2。目标是创建一个新数组 $array3,它合并两个数组中的所有键值对。 此外,提供的数组具有唯一的 ID,而名称可能重合。要求...
    编程 发布于2024-12-23
  • Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta:列偏移的删除和恢复Bootstrap 4 在其 Beta 1 版本中引入了重大更改柱子偏移了。然而,随着 Beta 2 的后续发布,这些变化已经逆转。从 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    编程 发布于2024-12-23
  • 如何在 64 位机器上安全地将指针转换为整数?
    如何在 64 位机器上安全地将指针转换为整数?
    将指针转换为整数:针对 64 位机器重新审视在 C/C 中,处理 64 位机器时的潜在陷阱位机在处理指针时出现。传统的转换技术,如下所示,可能会导致精度错误:void function(MESSAGE_ID id, void* param) { if (id == FOO) { int ...
    编程 发布于2024-12-23
  • 如何在 Chrome 中安全打开本地 HTML 文件?
    如何在 Chrome 中安全打开本地 HTML 文件?
    如何在“--allow-file-access-from-files”模式下使用 Chrome 启动 HTML?解决此问题需要通过 Google Chrome 以“--allow-file-access-from-files”模式启动 HTML 文件。然而,尽管多次尝试实施以下步骤,但事实证明它并不...
    编程 发布于2024-12-23
  • 如何在 JavaScript 中动态生成选择元素的选项?
    如何在 JavaScript 中动态生成选择元素的选项?
    使用 JavaScript 为选择元素生成动态选项在 Web 开发中,我们经常遇到为选择元素创建动态选项的需要。如果手动完成,这可能是一项耗时的任务,尤其是在处理大量选项时。本文提供了使用 JavaScript 自动执行此过程的解决方案。使用 For 循环创建选项一种简单的方法是使用 for 循环来...
    编程 发布于2024-12-23
  • 为什么自动换行在 HTML 表格中不起作用,如何修复?
    为什么自动换行在 HTML 表格中不起作用,如何修复?
    HTML 表格中的自动换行:修复未换行的文本自动换行是一个 CSS 属性,用于使文本在元素内换行就像 div 和 span 一样。但是,它通常无法在表格单元格中工作,导致文本溢出单元格的边界。要解决此问题,您可以使用表格的 table-layout:fixed CSS 属性。此属性强制表格具有固定布...
    编程 发布于2024-12-23
  • 什么时候应该在 C++ 中使用 `std::size_t` 作为循环计数器?
    什么时候应该在 C++ 中使用 `std::size_t` 作为循环计数器?
    何时在 C 代码中使用 std::size_t问题:何时使用 C 中的循环,特别是在比较数组大小的情况下,最好使用 std::size_t 而不是像这样的原始数据类型int?示例:#include <cstdint> int main() { for (std::size_t i...
    编程 发布于2024-12-23
  • 我应该对网站上的图像使用 Base64 编码吗?
    我应该对网站上的图像使用 Base64 编码吗?
    了解以 Base64 编码图像的影响将图像转换为 Base64 编码是 Web 开发中的常见做法。然而,重要的是要了解它对文件大小和网站性能的影响。Base64 编码图像的大小增加当图像转换为 Base64 时,其大小通常会增加约 37%。这是因为Base64编码使用6位字符集来表示8位数据,导致大...
    编程 发布于2024-12-23
  • 插入数据时如何修复“常规错误:2006 MySQL 服务器已消失”?
    插入数据时如何修复“常规错误:2006 MySQL 服务器已消失”?
    插入记录时如何解决“一般错误:2006 MySQL 服务器已消失”介绍:将数据插入 MySQL 数据库有时会导致错误“一般错误:2006 MySQL 服务器已消失”。当与服务器的连接丢失时会出现此错误,通常是由于 MySQL 配置中的两个变量之一所致。解决方案:解决此错误的关键是调整wait_tim...
    编程 发布于2024-12-23
  • HTML 格式标签
    HTML 格式标签
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    编程 发布于2024-12-23
  • 考虑到版本特定的行为,如何正确地将 Java 数组转换为列表?
    考虑到版本特定的行为,如何正确地将 Java 数组转换为列表?
    在 Java 中将数组转换为列表:数组和列表转换之旅在数据操作领域,数组和列表之间的转换列表是 Java 等编程语言中的基础操作。然而,这种转换的复杂性可能会带来挑战,特别是由于 Java 版本之间行为的微妙变化。Arrays.asList() 行为的演变The Arrays.asList() 方法...
    编程 发布于2024-12-23
  • 为什么 Python 会抛出 UnboundLocalError?
    为什么 Python 会抛出 UnboundLocalError?
    UnboundLocalError 是如何发生的:Python 中的未绑定名称和变量绑定在 Python 中,变量绑定决定了变量的作用域和生命周期。当名称未分配值时,它被视为未绑定。这可能会导致 UnboundLocalError 异常。了解未绑定局部变量与具有显式声明的语言不同,Python 允许...
    编程 发布于2024-12-23
  • 通过“jQuery 快速入门”课程释放您的 Web 开发技能
    通过“jQuery 快速入门”课程释放您的 Web 开发技能
    您准备好提升您的 Web 开发专业知识并释放最流行的 JavaScript 库 jQuery 的强大功能了吗? LabEx 提供的“jQuery 快速入门”课程就是您的最佳选择。这个综合性的程序将引导您了解 jQuery 的基础知识,使您能够操作文档对象模型 (DOM) 并为您的网页注入迷人的交互性...
    编程 发布于2024-12-23
  • 如何在 MySQL WHERE IN() 子句中处理具有多个值的记录?
    如何在 MySQL WHERE IN() 子句中处理具有多个值的记录?
    MySQL IN () 运算符查询 MySQL 数据库时,WHERE IN () 运算符常用于根据特定条件检索行列中的值。例如,以下查询从“table”表中检索“id”列与任意值 (1、2、3、4) 匹配的所有行:SELECT * FROM table WHERE id IN (1,2,3,4);但...
    编程 发布于2024-12-23

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3