Javascript学习笔记之类与继承(一)
来源:互联网 发布:淘宝汽车冬季坐垫 编辑:程序博客网 时间:2024/06/07 19:11
作为一个前端初学者,从2015年初入门至今,断断续续已经有一年的时间了。从HTML语法,CSS语法,Javascript慢慢的自己去重构一些网站,渐渐学习心的技术H5以及CSS3。前段时间一直在研究H5制作小游戏,感觉很酷,但是无论H5技术多么炫,最终还是回归javascript的逻辑。因此这一两个月开始深入研究Javascript的语法,把一些心得体会写在这里,也是为了自己来看,不断学习不断进步。
先说构造函数
/*构造函数Complex*/function Range(from,to){ this.from=from this.to=to console.log("this"+this)}//我的理解,相当于重新继承了range,使其具备methods方法//定义methodsRange.prototype={ includes:function(x){ return this.from<x && x<=this.to }, foreach:function(f){ for(var x=Math.ceil(this.from);x<this.to;x++) f(x) }, toString:function(){ return "("+this.from+"....."+this.to+")" }}
Range是一个对象Object,继承了Object的方法和属性,同时我们又定义了Range.prototype新的方法includes、foreach、tostring
新定义Range的对象r,它是Range的实例化对象,具有属性from:1,to:3,以及Range的方法foreach,includes,toString以及Object属性
实例化对象r的construtor是function Object()
构造函数Range的constructor是function Function()
Function继承自对象Object,类似于Date
再谈继承
function Complex(real,imaginary){ if(isNaN(real)||isNAN(imaginary)){ //isNaN()用于判定是否是非法字符 throw new TypeError() } this.r=real this.i=imaginary}Complex.prototype.add=function(that){ return new Complex(this.r+that.r,this.i+that.i)}Complex.prototype.mul=function(that){ return new Complex(this.r*that.r-this.i*that.i,this.r*that.r+this.i*that.i)}
此时我们可以看到Complex的属性有add,mul,constructor
Complex.prototype={ mag:function(){ return Math.sqrt(this.r*this.r+this.i*this.i) }, neg:function(){ return new Complex(-this.r,-this.i) }, toString:function(){ return "{"+this.r+","+this.i+"}" }}
如果再写上面这行代码
add,mul,constructor消失不见了!!!!!
为什么呢?
Ans:我认为Complex.prototype是重写prototype ,而Complex.prototype.mul是调用Complex.prototype的构造方法constructor
再引到之前的代码:
Function.prototype.construct=function(aArgs){ var oNew=Object.create(this.prototype) this.apply(oNew,aArgs) return oNew}function Myconstructor(){ for(var nProp=0;nProp<arguments.length;nProp++){ this["property"+nProp]=arguments[nProp] }}var myArray=[4,"hello world",false]var myInstance=Myconstructor.construct(myArray)
未实例化的对象Myconstructor的constructor是Function,因此可以为Function.prototype定义一个方法construct,可以通过var myInstance=Myconstructor.construct(myArray)实例化对象myInstance
话说回来,Complex.prototype.mul是调用Complex.prototype的构造方法constructor,也就是类似于var myInstance=Myconstructor.construct(myArray)
未完
感觉这里面还是很晦涩难懂
- Javascript学习笔记之类与继承(一)
- java学习之类与继承
- JavaScript面向对象之类与继承
- javascript继承学习(一)
- c++学习之类的继承与派生
- javascript 学习笔记(2) 原型链与继承
- JavaScript 学习笔记八 继承与引用
- Javascript学习笔记(Object 对象与继承)
- JAVA学习笔记(一)---单例模式与继承
- java学习笔记<一> 继承与接口
- 《JavaScript学习笔记》:继承
- c++学习之类继承
- 学习笔记之类(三)
- Java学习笔记【继承之类、超类、子类】
- 《JavaScript高级程序设计》学习笔记(继承)
- javascript 学习笔记(5)---继承
- java web学习笔记(javascript继承)
- [整理]JavaScript的继承之类式继承
- Hdu 1233 还是畅通工程
- 引—新的开始
- Mobile architecture
- Android通知的使用及简单二次封装
- 【BZOJ】3339 RMQ Problems - Ⅰ - 题解
- Javascript学习笔记之类与继承(一)
- 秒杀系统架构分析与实战
- poj 2528 Mayor's posters 线段树
- win 命令行常用命令
- Android 代码混淆 选项说明
- AS关于buildToolVersion与CompileSdkVersion的区别
- CodeForces 590B Chip 'n Dale Rescue Rangers 题解
- 合并静态库总结
- 信息滚动效果制作