浏览 4656 次
锁定老帖子 主题:python vs javascript
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-03-05
最后修改:2009-03-05
python的class对数据和函数的存储都是维绕着__dict__. 对象的属性和方法都存在里面。 而javascript的对象(Object或function)应该有两个hash存储数据,一个是prototype,一个是xxx(现在还不知道叫什么, 存储对象自己的方法和数据)。也是数据和方法混合存储。 对于对象的实例方法的搜索,二者也是差不多。 python中: class Dog(): def spark(self): print "spark" dog = Dog() dog.spark() #输出 spark dog.__dict__中没有任何东西,当dog.spark调用时,python首先在dog__dict__中找spark,如果没有,就从class Dog中的__dict__中查找。 class dict中的函数没有copy到instance中去。 对于javascript: function Dog(){} Dog.prototype.spark = function(){alert('spark');} dog = new Dog(); dog.spark(); #输出spark 如果修改class Dog的方法会影响dog的方法吗? Dog.prototype.spark = function(){alert('spark2');} dog.spark() #输出spark2 变了。 所以javascript的方法检索和python一样。 python和javascript感觉很像, 从python的class和function的定义方式, key:value, 就可以看出,python的核心就是dict。 而javascript的prototype也就是一个dict。 他们对于方法和数据都是混合存储的。不加”()“就是方法本身,加了“()”就是对方法进行调用。 这和ruby的实现方式就不一样了。 因为ruby是OO的纯爷们,内部区分了成员变量和方法,所以存储也是分开的iv_table和m_table. 而class实例化的过程中,又和javascript有点像。 javascript中prototype中定义的方法相当于ruby中的instance_methods。里面的东西是可以在函数检索的范围。不同的是,js的函数是copy的。ruby在class实例中只是保存了一个指向class的指针k_class. js和ruby的class都是把函数分成了两部分,instance_methods(prototype)和class methods(对象私有方法) 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |