javascript与python中的对象模型

时间:2024-02-16 19:15:24

前两天在看这一块,总结一下:
先来看js:
js除了值类型都是对象。一切(引用类型)都是对象。
对象的定义:属性的集合。而所有对象都是由函数Object/Function创建的。 但是要注意,函数也是对象,函数只不过是一类特殊的能创造对象的对象(搁在python里就是类对象)。
每个对象都有一个__proto__,指向创建它的函数的prototype。Function创建一切函数,包括他自己,所以他的__proto__指向自身的prototype。(Function其实类似于python中的type)
(特殊例外:Object.prototype.__proto__指向null)

函数:带有[[Construct]]内部方法的对象能创造新的对象。
函数是对象的一种。所以函数也是属性的集合。函数名是指向对象的指针。
Function创建一切函数,包括他自己。
每个函数都有一个prototype,这个prototype都是对象(属性的集合),这个prototype呢是由Object创造的。
注意:Object()是函数

在这里插入图片描述
这个图呢分左中右三列,左边和右边都是普通对象。中间一列是函数对象。
原型给js中的继承带来了灵活性。

再来看python:在这里插入图片描述
要区分清楚继承和实例化是OO中两个不同的概念。
python中所有对象分为类对象和实例对象
所有的类对象都是由type创造(实例化)出来的,包括type
所有的类都是object的子类,包括object在这里插入图片描述
这图是在解释器中python的type和object实现。PyType_Type就是type,PyBaseObject_Type是object。
数据结构中的ob_type指向每个类的类型(type函数的结果),tp_bases指向父类。

看来不同的编程语言在实现时也有一些相似之处,还不清楚为什么他们要这么设计,可能是为了区分开实例化和继承。