Atitit.prototype-base class-based  基于“类” vs 基于“原型”

Atitit.prototype-base class-based  基于“类” vs 基于“原型”

 

 

1. 基于“类” vs 基于“原型”1

2.  对象的产生有两种基本方式。一种是以原型(prototype)对象为基础产生新的对象。一种是以类(class)为基础产生新对象1

3. 基于类(class-based,基于原型(prototype-based)和基于元类(metaclass-based)的对象模型2

4. 基于类(class-based)基于原型(prototyped-based)之分,两者什么差别..2

5. 原型对象: 原型对象的工作原理:3

6. ref3

 

1.  基于“类” vs 基于“原型”

 

面向对象编程(Object Oriented Programming)只是一种编程范型(Programming Paradigm),其核心概念是“对象”(Object)。
在这一编程范型之下存在多种不同的风格(Style)。
Smalltalk、C++、JAVA、C# 之类的面向对象编程语言称之为 Class-based OOP Language (基于“类”的面向对象编程语言),而如 NewtonScript、Self、Javascript 之类的语言则称之为 Prototype-based OOP Language (基于“原型”的面向对象编程语言)。



他们都属于面向对象编程语言,区别在于风格不同。除了这两种风格,我记得在论文里还看到过其他风格

基于原型的编程语言在一些领域会非常方便,NewtonScript 当初发表的论文就是应用于苹果早期的“平板”电脑 Newton 之上的,主要用于 UI 部分的编码。作者认为相比于基于类的编程语言,更灵活而且更方便。
关于方便性方面我不想灌输概念,因为这比较主观,容易引起争议。
两种编程风格并无优劣高下之分,主要的差别在于思想和应用领域。建议灵活取舍。

 

作者::  ★(attilax)>>>   绰号:老哇的爪子  全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊  汉字名:艾龙,  EMAIL:1466519819@qq.com

转载请注明来源: http://www.cnblogs.com/attilax/

 

2.  对象的产生有两种基本方式。一种是以原型(prototype)对象为基础产生新的对象。一种是以类(class)为基础产生新对象

 

3. 基于类(class-based,基于原型(prototype-based)和基于元类(metaclass-based)的对象模型

 

而在一种所有皆对象的世界观背景下,在类模型基础上还诞生出了一种拥有元类(metaclass)的新对象模型。即类本身也是一种其他类的对象。以上三种根本不同的观点各自定义了三种基于类(class-based),基于原型(prototype-based)和基于元类(metaclass-based)的对象模型

 

 

4. 基于类(class-based)基于原型(prototyped-based)之分,两者什么差别..

 

Prototype Based Programming In a class-based language (like JavaLanguage or SmalltalkLanguage), every object is an instance of a class.

 

基于类型的语言                                        基于原型的语言

1.类型和实例是不相同                               所有的对象都是实例
2.以类型定义定义类;以构造函数实例化         定义和创建一组带有构造函数的对象
3.new运算符创建一个简单对象                相同
4.通过使用类型定义去定义存在类型的子类     以赋值一个对象带有构造函数作为的原型来构建对象层次
来构建对象的层次
5.通过类型链继承属性                                通过原型链继承属性
6.类型定义指定了一个类型的所有实例的所    构造函数或者原型指定了一组初始的属性.可以对一个对象或者一组对象动态的增加和删除属性。
有属性.不能在运行时动态增加属性

5. 原型对象: 原型对象的工作原理:

 

每个对象都有一个参考对象,这个参考对象称之为原型对象。原型对象有自己的属性和方法。当A是B的原型对象时,那 么B拥有A中的所有属性和方法。

 

原型对象的工作原理:

使用原型对象定义一个新的对象时,该对象不会立即拥有原型对象的属性和方法,在调用的时候本对象内部没有的属性和方法是才回去调用原型中的属性和方法。(动态分配).

 

6. ref

基于原型的语言与基于类型的语言 - zengwh的专栏 - 博客频道 - CSDN.NET.html

原文地址:https://www.cnblogs.com/attilax/p/5384462.html