编程范式系列-基于原型的编程
基于原型的编程,是指没有class化,直接使用对象的编程方式。又叫做基于实例的编程,主流语言是JavaScript。
1. 与传统面向对象编程的比较
1.1 关注对象实例行为,而后对类进行划分
在基于类的编程当中,对象总共有两种类型。
- 类
定义了对象的基本布局,函数特性。—-> 是行为和结构的集合,对所有的接口来说这些类的行为和结构都是相同的。
- 接口
是可以使用的对象,定义了一些行为,基于特定类的样式。
在这种模式下,类的划分是基于行为和结构,而不是状态。原型编程的主张者提倡关注一系列对象实例的行为,而后关注将其划分到使用方式相似的原型对象。实际上说,不同之处在于对于状态的看重程度。
1.2 创建实例的时间
对于基于类的系统,新的实例是通过类构造器以及参数来构造,实例是由类的行为和结构来定义的。
对于基于原型的系统,可以通过复制已有的对象或者通过扩展空对象来创建,是在运行时对原型进行修改的。
2. JavaScript 原型的概念
var foo = {name: "foo", one: 1, two: 2};
var bar = {three: 3};
bar.__proto__ = foo; // foo is...
// If we try to access foo's properties from bar
// from now on, we'll succeed.
bar.one // Resolves to 1.
// The child object's properties are also accessible.
bar.three // Resolves to 3.
// Own properties shadow prototype properties
bar.name = "bar";
foo.name; // unaffected, resolves to "foo"
bar.name; // Resolves to "bar"
每个对象都有个_proto_
属性,通过赋值操作,bar的原型现在是foo了。因此我们可以在bar里面访问foo的属性。
2.1 区分_proto_
以及prototype
_proto_
主要安放在一个实际的对象当中,用它来产生一个链接,用于寻找方法名或属性。用于链接原型的一个指针。prototype
当用new来构造一个新的对象的时候构造_proto_
的时候用的,是构造函数的一个属性。
2.2 对象的表现形式
- Object
- Function
3. Conclusion
其实是一种委托方式,通过一个序列的指针来定位属性,寻找数据。可以带来运行时的灵活性,数据方法都可以进行修改了。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 stone2paul@gmail.com
文章标题:编程范式系列-基于原型的编程
文章字数:614
本文作者:Leilei Chen
发布时间:2020-02-04, 12:30:57
最后更新:2020-02-04, 12:31:16
原始链接:https://www.llchen60.com/%E7%BC%96%E7%A8%8B%E8%8C%83%E5%BC%8F%E7%B3%BB%E5%88%97-%E5%9F%BA%E4%BA%8E%E5%8E%9F%E5%9E%8B%E7%9A%84%E7%BC%96%E7%A8%8B/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。