JavaScript没有提供传统面向对象语言中的类式继承,而是通过原型委托的方式来实现对象与对象之间的继承。
1.1动态类型语言与鸭子类型
编程语言按照数据类型大体可以分为两类:静态类型语言、动态类型语言。JavaScript是一门动态类型语言,在变量赋值时,不需要考虑它的类型。
静态类型的优点:在编译时就能发现类型不匹配问题;规定了数据类型可以提高编译器程序执行速度。
静态类型的缺点:迫使程序员依照强契约来编写程序,为每个变量规定数据类型。
动态类型的优点:编写的代码量更少、更简洁;
动态类型的缺点:无法保证变量的类型,在程序运行时可能发生类型相关错误。
var duck = {
duckSinging: function(){
console.log('嘎嘎嘎');
}
}
var chicken = {
duckSinging: function(){
console.log('嘎嘎嘎');
}
}
var choir = [];
var joinChoir = function(animal){
if(animal && typeof animal.duckSinging === 'function'){
choir.push(animal);
console.log('恭喜加入鸭子合唱团');
}
}
joinChoir(duck); //恭喜加入鸭子合唱团
joinChoir(chicken); //恭喜加入鸭子合唱团
chicken对象中含有duckSinging ,并且duckSinging是一个函数。完全具备鸭子发出叫声的条件。
符合动态类型的面向对象设计中的一个原则:面向接口编程、而不是面向程序编程。