高级面向对象技术

2023-11-10

封装

三种方式:

工厂函数模式

构造函数模式

构造函数模式和原型结合


工厂函数模式代码示例

function factory(name){
    var obj = new Object();
    obj.name = name;
    obj.sayName = function(){
        console.log('my name is ' + this.name);
    }
    return obj;
}
var obj = factory("xpf");
console.log(obj);
obj.sayName();

输出结果:

遗留问题:

1、类型无法细分
2、函数会重复创建/破坏封装性


构造函数模式代码示例

function Person(name,age){ 
    this.name = name; 
    this.age = age; 
    this.sayName = function(){ 
        console.log(this.name); 
    }; 
} 
var person1 = new Person("xpf",29);

输出结果:

解决类型细分问题

遗留问题:

函数会重复创建/破解封装性


构造函数模式和原型结合代码示例

function Dog(name,age){
    this.name = name;
    this.age = age;
}
Dog.prototype = {
    constructor:Dog,
    sayName:function(){
        console.log('name is',this.name);
    },
    sayAge:function(){
        console.log('age is',this.age);
    }
}
var d = new Dog('test',12);
var d2 = new Dog('hello',1);
d.sayName();
d.sayAge();
d2.sayName();
d2.sayAge();
console.log(d);

输出结果:

 

属性保存在实例中,方法保存在实例的构造函数原型中


继承
 

原型链继承

借用构造函数

原型链继承

1、子构造函数的原型指向父构造函数的实例
2、继承一般写在子构造函数实例之前

代码示例:

function Dog(name,age){
    this.name = name;
    this.age = age;
}
Dog.prototype = {
    constructor:Dog,
    sayName:function(){
        console.log('name is',this.name);
    },
    sayAge:function(){
        console.log('age is',this.age);
    }
}

var d = new Dog('test',12);
d.sayName();
d.sayAge();
console.log(d);

Person.prototype = new Dog();
Person.prototype.constructor = Person;
function Person(name,age,gender){
    this.name = name;
    this.age = age;
}
var p = new Person('xpf',23,'male');
p.sayName();
p.sayAge();
console.log(p);

输出结果:


借用构造函数

使用Dog.call(this,name,age);

代码示例

function Dog(name,age){
    this.name = name;
    this.age = age;
}
Dog.prototype = {
    constructor:Dog,
    sayName:function(){
        console.log('name is',this.name);
    },
    sayAge:function(){
        console.log('age is',this.age);
    }
}

var d = new Dog('test',12);
d.sayName();
d.sayAge();
console.log(d);

Person.prototype = new Dog();
Person.prototype.constructor = Person;
function Person(name,age,gender){
    Dog.call(this,name,age);
}
var p = new Person('xpf',23,'male');
p.sayName();
p.sayAge();
console.log(p);

输出结果:

 

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

高级面向对象技术 的相关文章

  • windows为配置安全策略

    文章目录 限制 Management Manage01 05 只能从Client登录 限制 Finance F01 10 不能关闭计算机和重启计算机 所有的域计算机和域用户都能自动注册证书 证书颁发机构已经颁发过一次就不再重复颁发 除非证书

随机推荐

  • ChatGPT国内镜像软件推荐

    1 ChatGPT镜像是什么 ChatGPT镜像是一种技术方案 它将OpenAI的ChatGPT模型与相关技术部署在用户本地或私有服务器上 采用这种方式 用户可以在自己的环境中运行ChatGPT模型 无需依赖于OpenAI的在线API服务
  • 考研复试数据库原理课后习题(十四)——内存数据库系统

    内存数据库系统 1 内存数据库和磁盘数据库有什么区别 2 内存数据库的特点有哪些 内存是计算机存储体系结构中能够被程序可控访问 相对于硬件控制的cache 的最高层次 是能够提供大量数据存储的最快的存储层 内存数据库具有几个重要特性 高吞吐
  • 【RT-DETR】《DETRs Beat YOLOs on Real-time Object Detection》译读笔记

    DETRs Beat YOLOs on Real time Object Detection 摘要 近期 基于端到端的 transformer based的检测器 DETRs 取得了卓越的性能 然而 DETRs类模型计算成本高的问题尚未得到
  • 前沿应用丨大规模无人机集群与“虚实结合”半实物仿真系统

    一 应用背景 无人机集群在军事 安全 救援 航空监测 物流配送等领域具有广泛的应用前景 它可以提高任务执行的效率 灵活性和安全性 同时降低人力资源的需求和风险 无人机集群研究涉及多个学科领域 如机器人学 控制理论 通信技术和人工智能等 目前
  • TCP/IP 网络设备与基础概念

    本文目的在于按照自己的理解 解释清楚网络中的一些基本概念 以及支撑概念落地的网络设备的工作原理 从而解决网络联通性问题 以及为定量分析网络性能问题打基础 如有错漏 欢迎指正 什么是 WAN vs LAN 什么是子网 网关 LAN vs 子网
  • 小白笔记——HTML到Java的Date型转换

    本笔记旨在记录新手学习编程时遇到的问题以及解决方法 主要是作为备忘录来使用 希望路过的大神可以指点一二 同时也希望这个笔记可以帮助到其他有同样困惑的小伙伴 大学毕业之后就再没有用中文写过文章了 所以我写的东西字里行间都会透露出一股子翻译大碴
  • 星星之火-58:CPRI协议缺点,eCPRI协议是如何克服CPRI协议的不足?

    1 CPRI协议不足 CPRI数据传输链路属于空口协议栈 硬件 应用软件共同实现空口协议栈 RFIC gt FPGA RF gt 时域采样 CPRI gt CPRI gt DSP gt L1 软件 gt L2软件 gt L3软件 1 CPR
  • Orcale产生随机数

    1 Oracle中产生uuid的方法 select lower sys guid from dual 2 oracle中函数nvl 如果oracle第一个参数为空那么显示第二个参数的值 如果第一个参数的值不为空 则显示第一个参数本来的值
  • [orin] nvidia orin 上配置tensorrt

    版本 jetpack 5 0 1 tensorrt 8 4 1 5 概述 tensorrt会跟着jetpack的包一起安装 系统本身自带的python是3 8的版本 tensorrt的python包位于这个路径下 cd usr lib py
  • 可视化dockerregistry中的镜像

    1 先来个简单的 docker run d p 5000 5000 name registry srv registry 2 docker run it p 8080 8080 name registry web link registry
  • WebSocket的核心事件

    前言 在上一篇文章中 Spring Boot使用WebSocket模拟聊天 已经简单实现了我们WebSocket的Demo 里面使用的WebSocket事件函数在此做一个总结 WebSocket整体通讯的流程就是 建立链接 gt 发送消息
  • 用定时器0控制切换流水灯顺序,用外部中断控制两种数码管显示方式

    include reg52 h 此文件中定义了单片机的一些特殊功能寄存器 typedef unsigned int u16 对数据类型进行声明定义 typedef unsigned char u8 sbit LSA P2 2 sbit LS
  • 开关电源变换器稳态原理分析(电感伏秒平衡及电容电荷平衡)

    在大量开关周期中 当开关频率固定时 开关占空比D也保持恒定 例如对n个周期 电流波形和电压波形在每个开关周期是重复的 这就意味着电压波形和电流波形变成周期性波形 周期为T 即i n 1 T i nT v n 1 T v nT 这样的状态就称
  • 通过 Debian Packages安装ROS 2(Linux Mint20.2安装ROS2 foxy)

    安装ROS foxy的文章较少 这里记录一下自己安装时遇到的一些坑 1 https raw githubusercontent com访问不了 1 设置语言环境 locale check for UTF 8 sudo apt update
  • openssh升级编译安装,更新Openssh和openssl

    openssh下载 https www openssh com openssl下载 https www openssl org 注 openssh需要配套openssl使用 软件包安装和编译安装的区别 软件包安装 yum provides
  • pycharm中从虚拟环境导包

    一 现有环境 在terminal中输入命令 pip freeze gt requirements txt 下载包到本地 二 把下载好的包放入新环境项目的跟目录下 新环境会提示是否安装 点击 install requirements 点击in
  • LeetCode 18. 四数之和

    文章目录 1 排序 双指针 2 对上面代码加剪枝 题目链接 https leetcode cn problems 4sum 1 排序 双指针 class Solution using ll long long public vector
  • Linux使用4g模块拨号上网

    imux6ull 串口连接移远的4g模块EC200N 使用pppd拨号上网 1 设置内核支持pppd 打开pppd下的所有项 编译内核 Device Drivers gt Network device support gt PPP poin
  • Git出现无法同步问题的解决方式

    在我们使用git同步至github服务器上去时 可能会出现 the request URL returns error 403 Forbbidden while accessing 权限不够 此项目为私有 没有权限 输入用户名和密码 或远程
  • 高级面向对象技术

    封装 三种方式 工厂函数模式 构造函数模式 构造函数模式和原型结合 工厂函数模式代码示例 function factory name var obj new Object obj name name obj sayName function