JS之理解继承
2024-10-07 06:43:49
JS之理解继承:https://segmentfault.com/a/1190000010468293
1.
call
继承,也叫借用构造函数
、伪造对象
或是经典继承
。call
继承回把父类的私有属性和方法继承给子类私有;父类公有属性(原型上的属性)无关。当然这里的call
也可以用apply
。
//父类F //子类S
function S(){
F.call(this)
}//原理就是改变F中的this指向,指向S的实例,子类会获得父类F的私有属性和方法
2.原型链继承:在
1
中通过call
继承到了父类的私有属性和私有方法。下一步就是有共有属性和方法。原型链继承把父类私有和公有的属性,都给了子类公有,子类的原型作为父类的实例。原型链继承会使得父类的私有属性在子类的私有和公有都得到继承。
function S(){};
//把子类公有的作为父类的实例;
S.prototype=new F;
let s=new S;
3.冒充继承:通过遍历父类的属性,把父类私有+公有的的属性都给了子类私有。
for in
循环,只能遍历自定义的属性和方法;拿不到系统的属性和方法,例如constructor
;
function S(){
for(var attr in f){
this[attr]=f[attr];}}
let s=new S;
4.混合继承
1
:call
继承+原型链继承;子类私有中有父类私有的,子类公有也有父类私有;;
//子类私有继承父类私有;
function S(){ F.call(this)};
//子类公有继承父类私有——公有
S.prototype=new F;
let s=new S;
5.混合继承
2
:call
继承+拷贝继承(extend
),通过extend
方法遍历父类原型上的方法,并复制给子类的原型。
//子类私有继承父类私有;
function S(){F.call(this);}
//通过extend方法进行拷贝继承公有
extend(S.prototype, F.prototype);
let s=new S;
//extend方法
function extend(obj2,obj1){
for(var attr in obj1){
obj2[attr]=obj1[attr]}
6.混合继承
3
:call
继承+Object.create()
,这也是ES6
里class
继承extends
的原理,点这。
//子类私有继承父类私有;
function S(){F.call(this)}
S.prototype = Object.create(F.prototype,{constructor:{value:S}})
//Object.create()原理
function Tmp(){};
Tmp.prototype= F.prototype;
S.prototype=new Tmp;
S.prototype.constructor=S;
//*********
let s=new S;
目前比较常用的是混合继承
2
和混合继承3
,子类能很清晰的继承父类的公有和私有。
最新文章
- diff &; pattch 命令
- .htaccess根据IP地址限制访问
- POJ 1844 Sum
- wpf 自定义依赖性属性 作用之一 对数据绑定的支持
- OpenJDK1.8.0 源码解析————HashMap的实现(一)
- 关于session_start()这个问题
- C语言学习第三章
- .Net Web开发技术栈
- 使用flex
- GIS 案例教程-蜂窝多边形制作模型
- python积累二:中文乱码解决方法
- SQLite 学习笔记(一)
- oracle完全恢复数据库
- reduceByKey和groupByKey区别与用法
- LeetCode: Generate Parentheses 解题报告
- banwagon vps装wordpress
- vijos p1777 引水入城(bfs+贪心)
- Git学习环境搭建和git对用户的增删改查命令
- 【数据库】E-R模型
- ie,360浏览器出现无法打开网页(包括本地html)的解决方法
热门文章
- 【leetcode】1185. Day of the Week
- Python Number(数字) Ⅰ
- priority_queue与multiset
- java+web+批量下载文件
- 浙大PAT CCCC L3-001 凑零钱 ( 0/1背包 &;&; 路径记录 )
- 牛客网 TaoTao要吃鸡 ( 0/1背包变形 )
- 类锁和对象锁,synchronized修饰static方法与非static方法的区别
- 1.8 全新日期api
- oracle11g安装补丁升级
- android intent调用系统camera