UED TEAM

我们的团队博客

登录 | RSS | 收藏本站
09-02
26

实例学习call、apply、callee用法

作者:mike 日期:09-02-26 时间:1:34 下午

可能不少学习javascript在使用call,apply,callee时会感到困惑,以下希望对于你有所帮助:
1、它是函数的方法或属性;
2、它可以改变执行上下文的this指向;
3、作为另一个对象调用一个方法(即可以把一个对象的方法作为另一个对象的方法来引用);
4、apply方法类似,但只能接收数组为参数;
5、callee函数的调用者。

f.call(o,1,2) 等同于
o.m = f;
o.m(1,2);

例1:
function o1(value){
if(value < 100){
this.value = value;
}else{
this.value = 100;
}
}

function o2(value){
o1.call(this,value);
alert(this.value);
}

var o = new o2(133554) //100  改变了this的指向

例2:
function c1(){
this.m1 = function(){
alert(this.name);
}
}

function c2(){
this.name = “mike”;
}
var nc1 = new c1();
var nc2 = new c2(); //必须
nc1.m1.call(nc2);  //mike 把方法m1作为对象nc2的方法来引用

例3:
function o1(arg){
if (arguments[1] < 100) {
this.value =
arguments[1] ;
}
else {
this.value = 100;
}
}

function o2(arg){
o1.apply(this, arg);
alert(this.value);
}

var o = new o2([101,60]) //60 参数只能是数组

callee用法,常用于匿名函数中
var factorial = function(x){
if(x <= 1){
return 1;
}
return x * arguments.callee(x – 1);
}
alert(factorial(5)); //120

Tags:

最多留言日志

随机文章

实例学习call、apply、callee用法 评论 (9)

  • 花匠

    这叫继承,JS有很多方法实现继承,比如果prototype

  • 艾玛

    一直对这个东西云里雾里,而且JS本身就是一个极其灵活的语言,唉!所以我通常都不怎么敢用(除了callee),而是用替代的写法,非常感谢精彩的示例。

  • f2elink

    已经收藏至http://f2elink.com

  • easyQuery

    有点豁然开朗~

  • bbv

    4、apply方法类似,但只能接收数组为参数;
    arguments不是数组但也可以用来做它的参数

  • cuikai

    不知道贵公司是否招“前端开发”工程师,
    我的简历
    http://uicss.cn/ck/resume.htm

    下面这个链接,是我的一些作品:
    设计作品 http://uicss.cn/homepage.htm
    山寨网易 http://uicss.cn/news.php

  • cuikai

    附加说明,个人所建设的所有网站,均为非盈利性质。

    建站目的:求职所用,为避免误会,特此说明一下……

  • phoenix

    在没有必要的情况下,尽量不要使用这三个,尤其是那个callee

  • icycn

    不是很详细的说

发表评论

评论只需审核一次,以后网友可以继续使用原来ID,邮箱进行回复:)