面向对象:
私有属性、私有方法、特权方法、静态方法、静态属性、公共属性、公共方法、继承、闭包
闭包:有权访问 另一个函数作用域中的变量 的函数
因为链式作用域问题,父级可以访问子级方法内部的变量,
将子级函数作为返回值
继承:
类式继承:
父类的实例赋值给子类的原型。
实例化父类,同时创建了父类原型,将子类原型指向声明的父类,此时子类原型可以访问父类以及父类原型。
构造函数继承:
在子类的构造函数作用域中执行父类的构造函数
子类中声明添加此句 Parent.call(this,params);
组合是继承:
类式继承+构造函数式继承
还是经典的call来调用父类构造函数,将父类重新执行一遍,类似于刷新一遍,这样多个子类实例之间不受引用类型的影响。
原型式继承:子类声明接收父类的类F,将F的原型指向进来的父类,return new F();
将父类在子类中封装返回。
<script type="text/javascript"> function inheritObject(o) { function F(){}; F.prototype = o; return new F(); } var book = { name: "js book", alikeBook: ["css", "book", "html"] }; var newbook = inheritObject(book); newbook.name = "newbook"; newbook.alikeBook.push("newbook book"); var obook = inheritObject(book); obook.name = "obook"; obook.alikeBook.push("obook book"); console.log(newbook.name); console.log(newbook.alikeBook); console.log(obook.name); console.log(obook.alikeBook); console.log(book.name); console.log(book.alikeBook); </script>
寄生式继承:是对原型式继承的封装
寄生组合式继承:写到这,我突然发现,ES6 对继承已经做了封装,思想共统一。