当前位置:网站首页>JS 内置构造函数 扩展 prototype 继承 借用构造函数 组合式 原型式creat 寄生式 寄生组合式 call apply instanceof
JS 内置构造函数 扩展 prototype 继承 借用构造函数 组合式 原型式creat 寄生式 寄生组合式 call apply instanceof
2022-08-03 19:28:00 【HandsomeDanielWu】
prototype 只有在构造函数new()才有用。构造函数的prototype就是实例的原型。实例可以通过prototype上得到方法和属性,称为原型链查找。所以方法一般添加在prototype上,不直接添加在实例上
字面量
数组扩展方法 拓展类型的方法 prototype
内置构造函数的关系
——poto_是谷歌浏览器的特殊属性
Object是所有原型的终点,Object本身又可以看作Function new()出来的
继承
继承
解决继承问题1:借用构造函数 call apply
组合继承
组合继承
原型式继承 creat
原型式继承
寄生式继承
不同实例中,函数是不同的地址,造成资源浪费
寄生组合式
寄生
组合
不需要new 父类,相比组合式继承,减少1次构造函数调用。
<body>
<script>
//这个函数接受两个参数,subType子类的构造函数,supertype父类的构造函数
function inheritPrototype(subType, superType){
//寄生式继承
var prototype = Object.create(superType.prototype);
subType.prototype = prototype;
}
//父类
function People(name, sex, age){
this.name = name;
this.sex = sex;
this.age = age;
}
//如果方法不卸载prototype里,会导致创建出来的实例会有各自的方法函数地址,
//造成资源浪费
People.prototype.sayHello = function(){
console.log('你好,我是'+ this.name +'今年' + this.age +'岁了');
}
People.prototype.sleep = function(){
console.log(this.name + '正在睡觉');
}
//组合
//子类
function Student(name, sex, age, school, sid){
//构造函数,省去再写一遍父类属性的复制方法
//call解决子类实例的引用对象是相同内存地址问题
//this上下文,指student
People.call(this,name, sex, age);
//子类属性
this.school = school;
this.sid = sid;
}
//调用inheritPrototype函数,这个函数可以让Student类和prototype指向
//People.prototype为原型的一个新对象
inheritPrototype(Student,People);
Student.prototype.exam = function(){
console.log(this.name + '正在考试');
}
Student.prototype.sayHello = function(){
console.log(this.name + '学生 say hello');
}
var xiaoming = new Student('小明','男',12,'ABC学校',12345);
xiaoming.sayHello();
xiaoming.sleep();
xiaoming.exam();
</script>
</body>
instanceof 检查是否在原型链上
边栏推荐
- MySQL读写分离的三种实现方案
- 网络协议-TCP、UDP区别及TCP三次握手、四次挥手
- 开源生态研究与实践| ChinaOSC
- Postgresql中的pg_memory_barrier_impl和C的volatile
- APT级全面免杀与企业纵深防御体系的红蓝对抗
- C#爬虫之通过Selenium获取浏览器请求响应结果
- 盲僧发现了华点——教你如何使用API接口获取数据
- Zhong Hua, senior architect of Ali: China-Taiwan strategic thinking and architecture practice; including internal implementation manual
- Web项目中简单使用线程池
- Execute the mysql script file in the docker mysql container and solve the garbled characters
猜你喜欢
ctfshow php features
盲僧发现了华点——教你如何使用API接口获取数据
数据驱动的软件智能化开发| ChinaOSC
入门3D建模基础教程详细分解
图像超分——Real-ESRGAN快速上手
Zhong Hua, senior architect of Ali: China-Taiwan strategic thinking and architecture practice; including internal implementation manual
基于移动GIS的环保生态管理系统
Jingdong cloud released a new generation of distributed database StarDB 5.0
【木马免杀】
Matlab论文插图绘制模板第42期—气泡矩阵图(相关系数矩阵图)
随机推荐
梅科尔工作室-14天华为培训六
丙二醇二乙酸酯(Propylene Glycol Diacetate)
群辉查看硬盘存储占用的方式
Kettle 读取 Excel 数据输出到 Oracle 详解
Shell programming loop statement
Rust:多线程并发编程
Calculation of the array serial number of Likou brush questions (one question per day 7/28)
利用net-snmp的库实现snmpget,snmpset
手把手教你定位线上MySQL慢查询问题,包教包会
flex布局
1-php学习笔记之数据类型
Handler 源码解析
Postgresql source code (64) Query execution - data structure and execution process before submodule Executor (2) execution
【C语言学习笔记(七)】C语言重定向输入与输出
【木马免杀】
力扣刷题之数组序号计算(每日一题7/28)
高性能计算软件与开源生态| ChinaOSC
ERROR: You don‘t have the SNMP perl module installed.
七夕之前,终于整出了带AI的美丽秘笈
钱江摩托某型号产品ECU货不对版 消费者知情权应如何保障?