js原型,继承
javascript是为了成为轻量级的语言而开发的。开发者并没有选择像其他面向对象的语言一样,定义类(class),而是使用了protopype实现继承。
每一个函数在创建时,都会创建它的Prototype.
而这个函数,如果被用来创造实例,则被称为构造函数(constructor)。
在c++语言中,构造函数是这样的.
class A{
public:
A();//声明constructor
}
在js中,被实例化出的对象,拥有一个属性。指向它的构造函数。
function A(){}
let a = new A()
a //A {} ,如下图
a.__proto__.constructor 即构造函数。
A.prototype具有一个constructor属性,指向A本身: ƒ A()

继承的意义,简单来说,就是把相同的数据或方法,存在同一块内存地址中,可以被不同的实例使用(节省空间)。
如果两个实例,拥有同一个prototype,那么它们就可以共用这个prototype。
对象间"继承"的方法:
1.如果构造函数不同的实例,怎样使用相同的prototype呢?
答案1 ,apply || call (构造函数继承)
function Human(){
this.species = "人类";
}
function Man(name){
Human.apply(this,arguments);
this.name = name;
}
let kk = new Man("kk");
kk.name //"kk"
kk.species //"人类"
答案2,覆盖prototype(原型链继承)
function Human(){
this.species = "人类";
}
function Man(name){
this.name = name;
}
Man.prototype = new Human();//使用实例替换原来的prototype
Man.prototype.constructor = Man;//替换实例的constructor。
let p = new Man("p")

答案3,组合继承(1,2两种都用。)也就是说,既有了复制过来的属性,然后又可以用prototype。
答案4:在prototype上面定义属性,而不是this。(原型继承?)
Human.prototype.like ="sugar";
Man.prototype = Human.prototype;//同样替换了Prototype.但是此时的prototype就是Human的prototype,就不可以替换掉它的constuctor了。
let e = new Man("e");
e.like//"sugar"
答案4:拷贝继承.
把其他prototype上的方法复制到自己的Prototype上。
2,如果要继承的对象并没有构造函数如何实现继承呢?
1.把要继承的对象附加到原型链上
function copyObject(parent){
var f = function(){};
f.prototype = parent;
return new f();
}
let hair = {
hairType:"black"
}
let t = copyObject(hair);
t.hair //"black"
2.deep copy
function deepCopy(p, c) {
var c = c || {};
for (var i in p) {
if (typeof p[i] === 'object') {
c[i] = (p[i].constructor === Array) ? [] : {};
deepCopy(p[i], c[i]);
} else {
c[i] = p[i];
}
}
return c;
}
js原型,继承的更多相关文章
- 【09-23】js原型继承学习笔记
js原型继承学习笔记 function funcA(){ this.a="prototype a"; } var b=new funcA(); b.a="object a ...
- JS原型继承与类的继承
我们先看JS类的继承 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> &l ...
- js原型继承四步曲及原型继承图
一:js原型继承四步曲 //js模拟类的创建以及继承 //动物(Animal),有头这个属性,eat方法 //名字这个属性 //猫有名字属性,继承Animal,抓老鼠方法 //第一步:创建父类 fun ...
- JS原型继承和类式继承
前言 一个多月前,卤煮读了一篇翻译过来的外国人写的技术博客.此君在博客中将js中的类(构造)继承和原型继承做了一些比较,并且得出了结论:建议诸位在开发是用原型继承.文中提到了各种原型继承的优点,详细的 ...
- 关于js原型继承
js的每个类都有一个prototype对象 访问对象的属性时,会先访问到对象自身是否有定义这个属性 如果没有定义,就会去访问对象所属类型的prototype对象是否有此属性 原型继承就是把类型的pro ...
- js原型继承
原型链: Object(构造函数) object(类型(对象)) var o = {}; alert(typeof o); //结果是object alert(typeof Object); //结果 ...
- js原型继承深入
js采用原型继承来实现类的派生,但是原型链再深入点,我们又知道多少呢,现在不妨往下看: 先来一个原型继承: var M1 = function() { this.param = "m1's ...
- 前端面试题总结二(js原型继承)
今天这篇文章整理了JS原型和继承的一些知识点,面试的时候 基!本!都!会!问!还不快认真阅读下文,看看你还有哪些知识点需要掌握吧~ 1.原型链 基本思想:利用原型让一个引用类型继承另外一个引用类型的 ...
- JS 原型继承的几种方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- JS 原型 & 继承
理解原型链 先看看http://www.ituring.com.cn/article/56184和http://www.cavabiao.com/prototype-and-inherit-of-ja ...
随机推荐
- Python实战项目6-后端多方式登录接口/手机登录接口
为开源项目共享代码 步骤: 1先fork开源项目 2clone下来,修改代码,进行提交 3提交pr,等作者同意 Pycharm 使用Git 右键文件会列出Git命令 登录注册功能分析 多方式登录接口: ...
- 一键接入 ChatGPT,让你的QQ群变得热闹起来
目录 项目效果 安装环境 配置文件 启动Mirai 启动ChatGPT 项目效果 ChatGPT 的出现对于人们的生活和工作都有着重要的影响,作为一个强大的自然语言处理模型,可以理解和生成自然语言,所 ...
- [转载]python跨文件使用全局变量的实现
python跨文件使用全局变量的实现 更新时间:2022-10-25 14:46:38发布时间:602天前 朗读 Python 定义了全局变量的特性,使用global 关键字修饰 1 global k ...
- Linux数据实时同步(sersync+rsync)
一.Slave服务器配置 1.在Slave服务器上安装Rsync [root@slave ~]# rpm -ivh rsync-3.1.2-11.el7_9.x86_64.rpm ###rpm 自行下 ...
- 第三周作业-N67044-张铭扬
1. 图文并茂说明raid0,raid1, raid10, raid01, raid5等原理. "RAID"是指独立硬盘冗余阵列(RAID, Redundant Array of ...
- 把逗号分隔的String字符串转List<Integer>
把逗号分隔的String字符串转int集合 集合或数组转变为逗号分隔的字符串的几种方式 1.自己编码实现 2.org.apache.commons.lang3.StringUtils 3.String ...
- Installing Superset最新版本安装(笔记)
官方文档:https://superset.apache.org/docs/installation/installing-superset-from-scratch 由于在centos上安装有各种问 ...
- python实现发票二维码解析
通过发票左上角的二维码信息,获取发票的关键信息,只需将图片格式的电子发票或扫描后的发票图片传入即可. 测试结果如下: 增值税电子普通发票:{'发票代码': '031xxxxxx311', '发票号码' ...
- Cisco——ASA和winserver2016配置l2tp over ipsec连接
Cisco--ASA和winserver2016配置l2tp over ipsec连接 L2tp over ipsec vpn配置 网络拓扑图: 配置vpn时要确保Winserver15能够ping通 ...
- Docker 对于容器的增删查命令
列出所有容器 ID 1 docker ps -aq 停止所有容器 1 docker stop $(docker ps -aq) 停止单个容器 1 docker stop 要停止的容器名 删除所有容器 ...