编程范式系列-基于原型的编程

基于原型的编程,是指没有class化,直接使用对象的编程方式。又叫做基于实例的编程,主流语言是JavaScript。

1. 与传统面向对象编程的比较

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" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏