[求助]JavaScript构造函数原型对象中属性的修改问题

wang_zhixing 2012-03-07 10:41:40
这是我在使用原型化构造函数时意外遇到的问题。下面是代码:


<script type="text/javascript">
function Cons(){ //声明构造函数 Cons()
Cons.prototype.info="something";
Cons.prototype.showInfo=function(){
alert(this.info);
}
}
Cons.prototype.info="changed!"; //尝试修改原型中的属性
var inst=new Cons(); //建立实例 inst
inst.showInfo(); //修改无效,警告"something"
</script>


上面的代码无法修改 Cons() 的原型对象!但是把 Cons.prototype.info="changed!" 这句放在建立实例之后,就有效了:


//...
var inst=new Cons(); //建立实例 inst
Cons.prototype.info="changed!"; //尝试修改原型中的属性
inst.showInfo(); //警告"changed!"
//...


当时我就怀疑是不是在实例化 Cons() 之前,原型对象是无法访问的。不过很奇怪,可以在原型对象中建立新的属性:


<script type="text/javascript">
function Cons(){ //声明构造函数 Cons()
Cons.prototype.info="something";
Cons.prototype.showInfo=function(){
alert(this.info);
}
}
Cons.prototype.newInfo="new!"; //尝试在原型中添加属性
var inst=new Cons(); //建立实例 inst
alert(inst.newInfo); //有效,警告"new!"
</script>


这是怎么回事啊?这也是 JS 的某种特性?求各位高手帮我分析一下。。。。。
...全文
413 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wang_zhixing 2012-03-09
  • 打赏
  • 举报
回复
[Quote=引用楼主 wang_zhixing 的回复:]
这是我在使用原型化构造函数时意外遇到的问题。下面是代码:

JScript code

<script type="text/javascript">
function Cons(){ //声明构造函数 Cons()
Cons.prototype.info="something";
Cons.prototype.showInfo=function(){
al……
[/Quote]

阿斌哥说得有道理,其实这只是一个执行顺序的问题
首先,JS解释器会提前处理函数和变量声明,此时已经创建了 inst 、 Cons 和 Cons.prototype
接着开始执行代码,到 Cons.prototype.info="changed" 时为 Cons.prototype 添加了属性 info:"changed"
然后遇到 new Cons() 开始执行函数,将函数内部为 prototype 赋的值放入 Cons.prototype 中
由于发现 info 重名,所以原来的值被覆盖 info:"something" ,如果将 Cons.prototype.info="changed" 放在后面,则覆盖顺序刚好相反
最后,将创建好的对象交给 inst
freedom_gooboy 2012-03-07
  • 打赏
  • 举报
回复
Cons.prototype.newInfo 和Cons.prototype.info 是不同的,但都属于Cons这个对象
freedom_gooboy 2012-03-07
  • 打赏
  • 举报
回复
//首先为什么出现"something"

Cons.prototype.info="changed!"; //开始时,你修改了原型属性的info值,但你实例化后(var inst=new Cons()),里面又有Cons.prototype.info="something";//所以值又值改了
所以值是"something"


Cons.prototype.newInfo //可以在原型对象中建立新的属性:是可以的,,你可以创建n个属性
内容概要:本文提出一种基于鱼鹰优化算法(OOA)优化的CNN-BiGUR-Attention混合模型,用于提升短期风电功率预测的精度与稳定性,采用Matlab实现代码仿真。该模型融合卷积神经网络(CNN)提取输入数据的局部空间特征,利用双向门控循环单元(BiGUR)捕捉风速、功率等时间序列的前后向动态依赖关系,并引入注意力机制自适应强化关键时间步的特征权重,从而增强模型对非平稳风电数据的表征能力;进一步,采用OOA算法对模型超参数进行全局寻优,有效提升模型收敛速度与泛化性能。研究基于实际风电场历史数据开展实验验证,结果表明,该方法相较传统模型在预测精度、鲁棒性和误差抑制方面表现更优,适用于高比例可再生能源接入背景下的电力系统调度需求。; 适合人群:从事新能源发电预测、电力系统优化调度、智能算法与深度学习融合应用等方向的科研人员及工程技术人员,尤其适合具备Matlab编程能力、熟悉时间序列建模与深度学习框架的研究者。; 使用场景及目标:①实现风电场短期功率高精度预测,支撑电网安全稳定调度与能量管理;②为深度学习模型结构设计与智能优化算法联合调参提供实践范例;③推动人工智能技术在可再生能源预测、智能电网运行等领域的落地应用。; 阅读建议:建议结合提供的Matlab代码深入理解CNN-BiGUR-Attention网络架构搭建、注意力机制实现方式及OOA优化流程,重点关注数据预处理、模型训练与参数调优细节,可通过替换不同风电数据集进行对比实验,进一步掌握模型迁移能力与适应性。

87,990

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧