高级JavaScript中最有趣的原型、原型链?

封装、继承、多态

基于类 class,JavaScript没有类;JavaScript可以实现面向对象语言特征:封装、继承、多态

封装:通俗的来说就是封装函数,通过私有化的变量和私有化的方法,不让外部访问到 
继承:简约来说可分为两种:
1).通过原型prototype对象实例化实现此类的继承;
2).直接实例化对象复制,完全复制父类对象 
多态: 多态就是通过对传递的参数判断来执行逻辑,即可实现一种多态处理机制

构造函数去继承对象

// 用new去调用,指向内存地址;
//  可以用this新建属性、属性值,为私有属性;
function Preson (x,y,z){this.x = x;this.y = y;this.z = z;
}
let person = new Preson();
new的过程中主要做了如下操作:
// 1、创建一个新对象:let obj = new Object()
// 2、将这个新对象的原型链指向构造函数的原型(prototype)属性:obj.__proto__ = Object.prototype
// 3、将构造函数的作用域赋给新对象(因此this引用的是新对象):let res = Object.call(obj)
//  4、执行构造函数中的代码,并在新对象上设置属性、方法或其他任何初始化逻辑,如果构造函数没有返回 //  其他对象,那么返回新对象 :person = typeof (res) === 'object'?res:obj

 原型对象prototype

公有属性,指向同一个内存地址;
可以被所以实例对象访问;
对象优先查找自身私有属性;
每个对象都拥有一个指针(__proto__),固定指向该对象构造函数的原型对象;

定义、修改属性

Object.defineProperty(obj,prop,descriptor):修改或定义一个对象的属性值;返回次=此对象;obj:需要定义或修改属性的对象;prop:需要修改的属性(字符串型);descriptor:描述属性     修改后默认不可修改 (writable : true //可修改)、默认不可枚举 (enumerable:true // 可枚举)、默认不可被删除(configurable : true //可删除);Object.defineProperty(hello.prototype, 'fn', {value: function () {console.log(this.name)},enumerable: false
})

class关键字

// 构造函数的语法糖;本质是函数;
class Student{//定义构造函数constructor(name,sex,age){             //实例化时立即调用//私有属性this.name = name;this.sex = sex;this.age = age;}//公有函数nihao(){...}//static 静态的、关键字,用来定义静态函数或静态属性;static getClassName(){...}   //调用与实例无关,用类名访问-Student.getClassName;
}
let s1 = new Student('..','..',..);// 将class转化为函数
class hello {constructor(name) {this.name = name}fn() {console.log(this.name)}
}// 转化为以下函数
'use strict' // class内部默认严格模式
function hello(name) {// class生成的对象只能通过new调用if (!(this instanceof hello) ) {throw new TypeError('')}this.name = name
}Object.defineProperty(hello.prototype, 'fn', {value: function () {if (!(this instanceof hello)) {throw new TypeError('')}console.log(this.name)},enumerable: false   //默认不可枚举
})

基于class继承

// extends:关键字,用于继承父类;
class son extends father{     //继承父类私有属性,super前不允许有任何属性;constructor(name){super(name);       //函数,调用父类属性;在调用 super()方法之前,子类构造函数无法使用this引用}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/336546.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【模拟IC学习笔记】 PSS和Pnoise仿真

目录 PSS Engine Beat frequency Number of harmonics Accuracy Defaults Run tranisent?的3种设置 Pnoise type noise Timeaverage sampled(jitter) Edge Crossing Edge Delay Sampled Phase sample Ratio 离散时间网络(开关电容电路)的噪声仿真方法 PSS PSS…

【web】springboot3 生成本地文件 url

文章目录 流程效果静态资源访问ServiceServiceImplController 流程 avatar_dir:请求图片在服务端的存放路径user.dir:项目根目录 效果 静态资源访问 application.yml 设置静态文件存储路径custom:upload:avatar_dir: ${user.dir}/avatar_dir/avatar_d…

Kubernetes(K8S)云服务器实操TKE

一、 Kubernetes(K8S)简介 Kubernetes源于希腊语,意为舵手,因为首尾字母中间正好有8个字母,简称为K8S。Kubernetes是当今最流行的开源容器管理平台,是 Google 发起并维护的基于 Docker 的开源容器集群管理系统。它是大名鼎鼎的Google Borg的开源版本。 K8s构建在 Docker …

【C++】十大排序算法

文章目录 十大排序算法插入排序O(n^2^)冒泡排序O(n^2^)选择排序O(n^2^)希尔排序——缩小增量排序O(nlogn)快速排序O(nlogn)堆排序O(nlogn)归并排序(nlogn)计数排序O(nk)基数排序O(n*k)桶排序O(nk) 十大排序算法 排序算法的稳定性:在具有多个相同关键字的记录中&…

C# WPF 数据绑定

需求 后台变量发生改变,前端对应的相关属性值也发生改变 实现 接口 INotifyPropertyChanged 用于通知客户端(通常绑定客户端)属性值已更改。 示例 示例一 官方示例代码如下 using System; using System.Collections.Generic; using Sy…

社交距离 - 华为OD统一考试

OD统一考试(C卷) 分值: 200分 题解: Java / Python / C++ 题目描述 疫情期间,需要大家保证一定的社交距离,公司组织开交流会议,座位有一排共N个座位,编号分别为[0…N-1],要求员工一个接着一个进入会议室,并且可以在任何时候离开会议室。 满足:每当一个员工进入时,…

鱼哥赠书活动第⑥期:《内网渗透实战攻略》看完这本书教你玩转内网渗透测试成为实战高手!!!!

鱼哥赠书活动第⑥期:《内网渗透实战攻略》 如何阅读本书:本书章节介绍:本书大致目录:适合阅读对象:赠书抽奖规则:往期赠书福利: 当今,网络系统面临着越来越严峻的安全挑战。在众多的安全挑战中&…

springboot2.7集成sharding-jdbc4.1.1实现业务分表

1、引入maven <dependency><groupId>org.apache.shardingsphere</groupId><artifactId>sharding-jdbc-spring-boot-starter</artifactId><version>4.1.1</version></dependency> 2、基本代码示例 基本逻辑&#xff1a;利用数…

Spring Redis Client使用Hessian序列化HINCRBY命令的Bug

前言&#xff1a; 公司自己封装Redis Client架包&#xff0c;使用Hessian协议对Redis中Value值进行序列化。在使用Hash结构的HINCRBY命令&#xff0c;处理序列化异常的问题。下面&#xff0c;我将详细说明一下。 正文&#xff1a; 公司封装Redis Client架包&#xff0c;其实就…

松鼠目标检测数据集VOC格式400张

松鼠&#xff0c;一种小巧玲珑、活泼可爱的啮齿类动物&#xff0c;以其蓬松的大尾巴和机敏的动作而广受欢迎。 松鼠通常体型小巧&#xff0c;四肢灵活&#xff0c;尾巴蓬松。它们的耳朵大而直立&#xff0c;眼睛明亮&#xff0c;给人留下了深刻的印象。松鼠的毛色因种类而异&a…

深入理解Word Embeddings:Word2Vec技术与应用

目录 前言1 Word2Vec概述2 CBOW模型2.1 CBOW模型简介2.2 基于词袋&#xff08;bag of word&#xff09;的假设2.3 One-hot向量编码2.4 分类问题 3 Skip-gram模型3.1 Skip-gram模型简介3.2 目标词预测上下文3.3 词语关联性的捕捉 4 优化Word2Vec模型的方法4.1 负采样和分层softm…

Python(34):Python调用request上传文件用unittest执行时报错ResourceWarning

Python调用request上传文件用unittest执行时报错ResourceWarning 报错信息&#xff1a; ResourceWarning: Enable tracemalloc to get the object allocation traceback 解决方法1&#xff1a;可以通过忽略来去掉警告 1、导入&#xff1a;import warnings 2、添加&#xff…