JavaScript,ruby,Python都是经典的动态语言,可以在运行的时候,动态改变对象的数据和结构。相比C++,VB.NET,C#等静态编译语言。其对象是在若有若无中变幻的。
智能枚举对象成员
相比静态语言;动态语言的优点,可能也就是他的缺点。其对象的不确定性。使他只能通过对对象整个生存期的分析,才能调用或获取其提供的数据和功能。对于大型集成化的项目。大型IDE开发化境中。枚举对象成员,已经是现在的IDE的标配。这可以简化程序员查找对象成员的时间。然而动态语言由于其对象的不确定性。至今没有卓越的IDE环境支持动态语言在开发的时候,提供智能枚举。(运行调式的时候,VS.NET还是可以基本枚举对象的成员)。
所以要在开发期提供快速查找对象的的语言,尽可能选择静态语言。
动态解析
动态语言,一般都是动态解析的。包括那些没有实现动态功能的脚本语言(如php)。动态分析脚本然后生成本机2进制指令,并运行。静态语言一般都需要通过编译器直接编译成CPU指令或脱离与CPU的虚拟指令码(JAVA、NET)。编译之后的对象类型基本就固定了。这也是集成IDE环境能枚举成员对象的原因。运行时,每个对象类型也是固定的了(即使是接口或抽象类,虽然可以改写,但原型也固定了)。而动态语言中的对象。是一个可以幻化的精灵。谁也不知道你下一次调用它的时候,它是什么样子。看看下面的JS代码
anObject.aProperty = " Property of object " ; // 对象的一个属性
anObject.aMethod = function () ... {alert("Method of object")} ; // 对象的一个方法
// 主要看下面:
alert(anObject[ " aProperty " ]); // 可以将对象当数组以属性名作为下标来访问属性
anObject[ " aMethod " ](); // 可以将对象当数组以方法名作为下标来调用方法
for ( var s in anObject) // 遍历对象的所有属性和方法进行迭代化处理
alert(s + " is a " + typeof (anObject[s]));
强类型、弱类型
当语言中的对象类型可以互相,隐式转换的时,则可称改语言为弱类型,大部分的动态语言都为弱类型。但是Python是强类型的动态语言。静态语言多为强类型。若对象不是其原型或兼容类型(如其派生的类型),则无法强制或隐式转换。将基类形转换为派生类型,需要强制转换!派生类型可以隐式转换成基类型。