
在社会上,评价一个人的能力和价值时,往往有两种不同的标准:一是“以关系”,二是“以能力”。这两种标准都体现在不同的文化、行业和个人价值观中,各有其支持者和反对者。
在编程语言中,有两种标准以不同的方式组织代码,将数据结构链接到函数。本文将简要讨论这两个通用标准的应用和作用原理。
类模型
在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 }
在这个模型中,数据和方法是相互独立的。优点是简洁明了,但缺点也很明显,因为方法和数据的独立性,很难重写方法定义。
概括
介绍完数据结构和方法的两种连接方式后,我们可以想到,当需要根据数据的类来实现同名不同功能的方法时,建议使用关系类模型。当方法通常相对固定,而数据是多变的,并且相同的方法适用于不同的数据时,可以使用基于能力的模型。
以上就是关系或能力,这两个标准都被使用的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1492081.html
微信扫一扫
支付宝扫一扫