对JavaScript中原型的理解

本文探讨了从Java到JavaScript面向对象编程思维的转变,并详细解释了JavaScript中的原型对象概念及其实现方式。通过实例展示了如何利用原型对象为内置类型添加方法。
从纯粹的面向对象思想(Java思想)向Javascript语言面向对象思想的转化沉痛而惨烈。Javascript中对象和类的概念转化悄然不动声色,让人迷糊。有时候,对Java理解得越清楚,对Javascript理解起来就越费劲。其中,对Javascript的原型对象的理解颇费功夫。

按照定义,每个javascript对象都有一个原型对象(简称原型),这个原型是由该对象的构造函数所定义(javascript自动创建的),并且对象继承原型的所有属性和方法(函数),比如 一个String对象 的原型为 String.prototype ,如果我们想要给String类添加方法,可以这样做(比如添加常用的trim()方法):


js 代码
String.prototype.trim = function (){
return this.replace(/(^\s*)|(\s*$)/g, "");
}


这个特性是相当令人惊讶的,因为这破坏了封装性,就好像在Java中你可以对Object进行修改一样。而function() 可以当作数据来给左操作数赋值(而不仅仅是当作动作),也让人吃惊。

对于Javascript内部类都可以这么改,对于自定义类当然可以这么改,如:


js 代码
function Circle(x,y,r){
this.x = x;
this.y = y;
this.r = r;
//this.prototype = null ; /*这句代码可以看作是隐含存在的,因为javascript 中“类”的定义和函数的定义结构上没有差异,所以可以说,所有函数都隐藏有这样一个属性。*/
}

然后,我们给原型加一个得到面积的方法:

Circle.prototype.area = function(){
return this.r * this.r * 3.14159 ;
}

这样使用:

js 代码
var circ = new Circle(0,0,2) ;
alert(circ.area()) ;

为什么要使用原型呢?因为我们可以在类中很轻松的定义我们想要实现的方法,如,还是上面那个求圆面积:

js 代码
function Circle(x,y,r){
this.x = x;
this.y = y;
this.r = r ;
this.area = function (){
return this.r * this.r * 3.14159 ;
}
}
//调用:
var circ = new Circle(0,0,2) ;
alert(circ.area()) ;

两者的调用代码完全一样,那为什么要使用原型呢?我感觉主要是为了解决对内部类型的继承问题,也就是说当你无法修改String的构造函数而想要让所有String实例都具有某一方法的时候,你可以用这个prototype。

参考:

JavaScript 权威指南(第四版)
内容概要:论文提出了“搭乘主信号”(ROP)的新频谱共享模,适用于具有环境反向散射通信能力的无线供电物联网设备。ROP模中,次级发射器从主信号中收集能量并将信息比特调制到主信号上,反射给次级接收器,同时不违反主系统的干扰要求。论文通过联合优化主信号发射功率和次级环境反向散射的反射系数,最大化次级系统的遍历容量。ROP模不仅利用了主系统的频谱,还利用主信号来收集能量和传输信息。论文还通过仿真验证了模的有效性,分析了不同约束条件(如速率约束、中断概率约束)对系统性能的影响。适合人群:从事无线通信、物联网、频谱共享等领域研究的科研人员和技术专家,以及对频谱共享和反向散射通信感兴趣的研究生。使用场景及目标:①研究物联网设备在频谱共享环境下的通信性能;②探索环境反向散射通信技术在无线供电物联网设备中的应用;③评估不同约束条件对次级系统性能的影响,为实际系统设计提供理论依据。其他说明:论文不仅提供了理论分析,还通过Python代码实现了系统建模和优化问题的求解,便于读者理解和复现研究结果。此外,论文指出现有研究在硬件和解码器设计方面较多,但在理论层面的系统分析尤其是互干扰问题的研究相对不足,强调了建立完整理论模的重要性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值