javascript之function对象包括call()和apply()

来源:互联网 发布:91永久域名 编辑:程序博客网 时间:2024/06/05 11:04
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
function test(){

}
console.log(test.constructor);
function test1(x,y,z){
return x+y+z;
}
console.log(test1.length);//返回函数参数的个数
//caller 在于谁调用A函数 就返回是谁调用的
function A(){
return A.caller;
}
function B(){
return A;
}
console.log(B());
console.log(A());//应为没有任何外层函数调用A 所以返回为null
//返回该函数执行时内置的argunebts对象
function test2(){
return arguments;
}
console.log(test2(2,2,2,344));
// arguments对象中有一个callee的属性 就是返回当前自身被调用的函数
function f(){
return arguments.callee;
}
console.log(f());//返回的就是f()这个函数


// 匿名函数的递归调用
(
function(count){
if(count<=3){
console.log(count);
arguments.callee(++count);
}
}
)(0);

var obj={
name:"liye",
say:function(somebody){
return 'hello  '+somebody+'  im  '+this.name;
}
};
console.log(obj.say('fff'));


//call()方法
var obj1={
name:'obj1name'
}
//在这里obj1也想调用obj里面的say方法 就要用到call()方法
//第一个参数是想调用的对象 第二个是参数 也可以传多个参数
console.log(obj.say.call(obj1,'xx'));//hello  xx  im  obj1name

var obj2={
calc:function(x,y,z){
return x+y+z;
}
};
console.log(obj2.calc.call(null,1,2,3))
//但这里传递三个参数太麻烦 于是用apply()来传递一个数组 就包含了三个参数
console.log(obj2.calc.apply({},[1,1,1]));
</script>
</head>
<body>
</body>
</html>
0 0
原创粉丝点击