JS继承
面向对象:
私有属性、私有方法、特权方法、静态方法、静态属性、公共属性、公共方法、继承、闭包
闭包:有权访问 另一个函数作用域中的变量 的函数
因为链式作用域问题,父级可以访问子级方法内部的变量,
将子级函数作为返回值
继承:
类式继承:
父类的实例赋值给子类的原型。
实例化父类,同时创建了父类原型,将子类原型指向声明的父类,此时子类原型可以访问父类以及父类原型。
构造函数继承:
在子类的构造函数作用域中执行父类的构造函数
子类中声明添加此句 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 对继承已经做了封装,思想共统一。
更多精彩原创心得,请关注微信公众号: 梯形

浙公网安备 33010602011771号