请大虾们帮忙讲解一段代码 100分相送!!

应该网 2009-03-13 03:54:48

<script language="javascript">
function sendMessage(msg, obj) {
if ( arguments.length ==2)
obj.handleMsg (msg);
else
alert ( msg );
}

sendMessage ( "How are you?", {
handleMsg: function (msg) {
alert ( "This is a custom message: " + msg );
}
});
</script>


虽然2000年的时候学过javascript,但对于出现函数(本例中的sendMessage )参数中包含{}及其他函数还是没法很好的理解。

希望大家给我上一课,非常感谢!!!
...全文
213 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
eagleking012 2009-03-13
  • 打赏
  • 举报
回复
<script language="javascript"> 
//javascript中也有对象的概念,并且对象可以有属性,和函数;
//它们都通过一个引用来供外界调用,这里obj是一个对象,obj.handleMSg代表引用对象中的handleMsg函数。
//arguments是一个javascript函数自带的参数,用来记录传给当前函数的参数数量,sendMessage函数可以接收
//两个参数,这里首先判断是否传递了两个参数,如果两个参数就调用参数obj的handleMsg函数.
function sendMessage(msg, obj) {
if ( arguments.length ==2){//如果参数的长度为2
obj.handleMsg (msg);//调用obj参数里的handleMsg方法, 此方法的参数是msg
}else { //如果参数的长度不为2
alert ( msg );//alert(msg参数) 如msg是"How are you?"
}
}
//{}在javascript中就好像java的new来构造一个对象,在sendMessage调用中通过构造一个新对象{name:value}
//name就是函数的引用,这里为handleMsg;value可以是一个数值货对象,function(msg)被指定为新对象的
//一个成员函数,其实现为弹出加工后的msg消息.这里会显示This is a custom message How are you?


sendMessage ( "How are you?",
{handleMsg: function (msg) {alert ( "This is a custom message: " + msg );}
});
//而且javascript函数是弱类型的,可以接收少于声明的参数个数,如果这样调用,则直接弹出"How are you?"
sendMessage("How ar you?");
</script>

希望清楚一点了..
应该网 2009-03-13
  • 打赏
  • 举报
回复
似乎明白了。


明天来结贴,谢谢各位。
hzrui 2009-03-13
  • 打赏
  • 举报
回复
近几年,对象直接量经常应用到,他的好处很多,你的例子是参数传递,我就说一个参数传递的例子吧,参数用对象直接量传递在jquery中也大量用到,

function sendMessage(obj) {
if(!obj.name)
{
obj.name="default";
}
if(! obj.message)
{
obj.message="default message";
}
if(! obj.handleMsg)
{
alert("this is a message to "+ obj.name );
}
else
{
obj.handleMsg();
}
}

sendMessage ({
message: "how are you",
name: "hzrui",
handleMsg: function (msg) {
alert (this.message + this.name );
}
});

你可以从上面的例子看出用对象作为参数的好处
wz_307 2009-03-13
  • 打赏
  • 举报
回复
<script language="javascript">
function sendMessage(msg, obj) {
if ( arguments.length ==2){//如果参数的长度为2
obj.handleMsg (msg);//调用obj参数里的handleMsg方法, 此方法的参数是msg
}else { //如果参数的长度不为2
alert ( msg );//alert(msg参数) 如msg是"How are you?"
}
}

sendMessage ( "How are you?",
{handleMsg: function (msg) {alert ( "This is a custom message: " + msg );}//在这里obj实际上是个长度为1的json对象
//它里面包含一个key值, 记handleMsg, 这个key值想对应的value是一个函数function(msg){alert(...)}
//这个function需要传如一个参数, 而这个参数根据sendMessage的定义, 是sendMessage的第一个参数,记"How are you?"字符串
});
</script>

希望清楚一点了..
conanhhy 2009-03-13
  • 打赏
  • 举报
回复
我个人理解:

该段代码大致意思是通过判断参数的个数,显示不同内容的提示框。

在调用sendMessage方法时,直接将一段function作为参数传递给方法,在sendMessage方法中,将它作为对象处理,通过对象调用handleMsg方法。

<script language="javascript">
function sendMessage(msg, obj) {
if ( arguments.length ==2)
obj.handleMsg (msg);
else
alert ( msg );
}

sendMessage ( "How are you?", {
handleMsg: function (msg) {
alert ( "This is a custom message: " + msg );
}
});
</script>
hzrui 2009-03-13
  • 打赏
  • 举报
回复
{}是对象直接量,定义一个对象

sendMessage ( "How are you?", {
handleMsg: function (msg) {
alert ( "This is a custom message: " + msg );
}
});
其中
{
handleMsg: function (msg) {
alert ( "This is a custom message: " + msg );
}
}
定义了一个对象,对象里面有一个属性,handleMsg,这个属性是个函数,
可以用 obj. handleMsg() 调用此方法
应该网 2009-03-13
  • 打赏
  • 举报
回复
谢谢两位的回答。正在学习jquery所以有些疑问。

wangdeqie 2009-03-13
  • 打赏
  • 举报
回复
我js也初学,我的理解:

function sendMessage(msg, obj) {//定义个函数
if ( arguments.length ==2)//如果传递的参数个数等于2
obj.handleMsg (msg);
else
alert ( msg );
}
sendMessage( "How are you?",
//How are you?既是msg值,因为传递了两个参数,所以执行obj.handleMsg (msg);也就是下面的函数:
{
handleMsg: function (msg)
{
alert ( "This is a custom message: " + msg );
}
}
);

jjccc 2009-03-13
  • 打赏
  • 举报
回复
我是这样理解的,不知道对不对。
sendMessage参数中包含{},就是一个数组

如果把代码改为:
<script language="javascript">
function sendMessage(msg, obj) {
if ( arguments.length ==2)
alert(obj.aaa);
else
alert ( msg );
}

sendMessage ( "How are you?", {
aaa:"dd"
});
</script>
结果是会输出 dd
wangdeqie 2009-03-13
  • 打赏
  • 举报
回复
通过arguments属性,函数可以处理可变数量的参数。arguments对象的length属性包含了传递给函数的参数的数目。


内容概要:本文介绍了一种基于多目标粒子群算法(MOPSO)的微电网优化调度模型,综合考虑风能、光伏、储能系统、柴油发电机、燃气轮机以及与主电网之间的能量交互等多种分布式能源的协同运行。通过构建以运行成本最小化、碳排放最低化和系统可靠性最优化为目标的多目标优化模型,利用Matlab平台实现MOPSO算法求解,完成对微电网在不同运行场景下的能量管理与调度方案优化。该模型能够有效平衡经济性与环保性之间的关系,适用于含多类型分布式电源的复杂微电网系统,具有较强的工程应用价值和科研参考意义; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及工程技术人员,尤其适合从事微电网、智能电网、综合能源系统、可再生能源集成与优化调度等领域研究的专业人士; 使用场景及目标:①用于多能源耦合微电网系统的协同优化调度研究;②支持多目标智能优化算法在能源系统中的建模与求解实践,帮助用户掌握MOPSO在实际工程问题中的应用方法;③为学术论文复现、毕业设计、科研项目开发提供完整的代码实例与技术支撑; 阅读建议:建议读者结合Matlab代码与理论文档,深入理解目标函数构建、约束条件处理及Pareto最优解集生成机制,重点关注算法参数设置、多目标权衡分析与结果可视化,并可通过调整能源配置或引入新约束进行二次开发与创新研究。

87,988

社区成员

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

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