博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
闲聊javascript继承和原型
阅读量:5960 次
发布时间:2019-06-19

本文共 1534 字,大约阅读时间需要 5 分钟。

javascript继承已经是被说烂的话题了,我就随便聊一点~

一、javascript的复制继承

javascript的继承有复制继承和原型继承,基于复制继承用的不太多,而且无法通过instanceof的验证

//拷贝继承,prototype.js的extend=>function extend(destination,source){    for(var property in source)    destination[property]=source[properyt];    return destination;}

二、javascript原型继承

js原型继承是基于原型链查找的,js每个函数都有prototype属性和__proto__属性,每个实例的__proto__属性都指向函数的prototype(es6里面实例的__proto__都指向这个函数),下面这个例子证明了这个观点。

function A(){    console.log(this.__proto__.aa);//1     this.aa=2}A.prototype={    aa:1}var a=new A;console.log(a.aa);//2a.__proto__={    aa:3}delete a.aa;//删除特权属性console.log(a.aa);//3

 实例在查找方法的时候按原型链查找,先找自身的属性,没有就到构造函数的prototype里找,没有再到构造函数的构造函数的prototype里找,只到Function的prototype。那我们让a的prototype等于A的实例,不就完成了继承了么。

function A(){}A.prototype={    aa:1}function bridge(){};bridge.prototype=A.prototype;function B(){}B.prototype=new bridge();B.prototype.constructor=B;

这里继承是用了一个bridge函数做了桥,因为当A有很多内容的时候,实例化A消耗比较多,而且并没有什么用,就用一个空函数做桥接一下。这里最后再改一下实例的构造函数指向自己,这就完成了继承。

var b=new B;B.prototype.cc=function(){    alert(3)}console.log(b.__proto__==B.prototype);//trueconsole.log(b.__proto__.__proto__===A.prototype);//true

这里b的__proto__是指向构造函数的prototype的。

 

三、基于object的原型继承:

const extend  =  (to, from) => {    // TODO: use `Reflect.ownKeys()` when targeting Node.js 6        for (const prop of Object.getOwnPropertyNames(from).concat(Object.getOwnPropertySymbols(from))) {            Object.defineProperty(to, prop, Object.getOwnPropertyDescriptor(from, prop));        }        return to;    };

 

转载于:https://www.cnblogs.com/dh-dh/p/5104073.html

你可能感兴趣的文章
Linux Namespace系列(09):利用Namespace创建一个简单可用的容器
查看>>
博客搬家了
查看>>
Python中使用ElementTree解析xml
查看>>
jquery 操作iframe、frameset
查看>>
解决vim中不能使用小键盘
查看>>
jenkins权限管理,实现不同用户组显示对应视图views中不同的jobs
查看>>
我的友情链接
查看>>
CentOS定时同步系统时间
查看>>
批量删除用户--Shell脚本
查看>>
Eclipse Java @Override 报错
查看>>
知道双字节码, 如何获取汉字 - 回复 "pinezhou" 的问题
查看>>
linux中cacti和nagios整合
查看>>
Python高效编程技巧
查看>>
Kafka服务端脚本详解(1)一topics
查看>>
js中var self=this的解释
查看>>
Facebook 接入之获取各个配置参数
查看>>
linux的日志服务器关于屏蔽一些关键字的方法
查看>>
事情的两面性
查看>>
只要会营销,shi都能卖出去?
查看>>
sed单行处理命令奇偶行输出
查看>>