返回
基础
分类

函数的能力,普通的方法传递

日期: 2019-11-22 05:27 浏览次数 : 154

方法函数:

其它面向对象的语言(比如Java)的一种共有的特性是“重载”函数的能力:传给它们不同数目或类型的参数,函数将执行不同操作。虽然这种能力在JavaScript 中不是直接可用的,一些工具的提供使得这种探求完全成为可能。
  在JavaScript的每一个函数里存在一个上下文相关的名为arguments的变量,它的行为类似于一个伪数组,包含了传给函数的所有参数。参数不是一真正的数组(意味着你不能修改它,或者调用push()方法增加新的项),但是你可以以数组的形式访问它,而且它也的确有一个length属性。

 

function sendMessage(sMsg,oObj) {
if (arguments.length == 2) {
oObj.handleMsg(sMsg);
oObj.test();
} else {
alert(sMsg);
};
}

 

      最近在看《PPK谈JavaScript》以及《精通JavaScript》,对这门脚本语言的理解深了很多,相信将来会变得更加的强大!

sendMessage("Hello world必赢手机登录网址 ,!");

必赢手机登录网址 1必赢手机登录网址 2示例

 

普通的方法传递:

 1 //一个简单的用来发送消息的函数
 2 function sendMessage( msg, obj ) {
 3 //如果同时提供了一个消息和一个对象
 4 if ( arguments.length == 2 )
 5 //就将消息发给该对象
 6 obj.handleMsg( msg );
 7 //否则,刚假定只有消息被提供
 8 else
 9 //于是显示该消息
10 alert( msg );
11 }
12 //调用函数,带一个参数– 用警告框显示消息
13 sendMessage( "Hello, World!" );
14 //或者,我们也可以传入我们自己的对象用
15 //一种不同方式来显示信息
16 sendMessage( "How are you?", {
17 handleMsg: function( msg ) {
18 alert( "This is a custom message: " + msg );
19 }
20 });
21 //一个使用任意数目参数创建一个数组的函数
22 function makeArray() {
23 //临时数组
24 var arr = [];
25 //遍历提交的每一个参数
26 for ( var i = 0; i < arguments.length; i++ ) {
27 arr.push( arguments[i] );
28 }
29 //返回结果数组必赢手机登录网址 3
30 return arr;
31 }

必赢手机登录网址 4必赢手机登录网址 5Code

function obj() {
}

 

//overload testing 函数重载
function sendMsg(msg,obj)
{
    if(arguments.length==2)
        obj.handleMsg(msg);
    else
        alert(msg);
}
sendMsg("Hello, World!");
sendMsg("How are you!",{
    handleMsg:function(msg)
    {
        alert("This is a custom msg:"+msg);
    }
});

obj.prototype.handleMsg = function(sMsg) {
alert("This is a custom message: " + sMsg);
};
obj.prototype.test = function() {
alert("test");
};

 

//type checkging 类型检查
var strTest="test";
var aryTest=[];
alert(strTest.constructor);
alert(aryTest.constructor);
alert(typeof strTest);
alert(typeof(aryTest));
alert(aryTest.constructor==Array);

sendMessage("asdfsdasdfdfa", new obj);

//make arry function 生成数组
function makeArray()
{
    var arr=[];
    for(var i=0;i<arguments.length;i++)
    {
        arr.push(arguments[i]);
    }
    return arr;
}

另一种方法:

//privileged method 特权方法
function User(name,age)
{
    var year=(new Date()).getFullYear()-age;
    this.getBornYear=function(){
        return year;
    };
}
var user=new User("Li",23);
alert(user.getBornYear());

//这里传进去了两个参数,第二个为一个对象。
//该对象有一个方法handleMsg()
sendMessage("How are you?", {
handleMsg: function(sMsg) {
alert("This is a custom message: " + sMsg);
},
test: function(){
alert("test");
}
});
对这样的方法传递不是很理解,不过也可以。

 

function sendMessage(sMsg,oObj) { if (arguments.length == 2) { oObj.handleMsg(sMsg); oObj.test(); } else { alert(sMsg); }; } sendMessage(Hello world!); 普通的方法...