请大虾们帮忙讲解一段代码 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 )参数中包含{}及其他函数还是没法很好的理解。

希望大家给我上一课,非常感谢!!!
...全文
153 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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属性包含了传递给函数的参数的数目。


87,997

社区成员

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

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