js之零零散散 回忆录

call方法:

看到第六章构造函数模式 构造对象时

var Person = function(age,name){

this.age = age;

this.name = name;

this.show = function(){

alert(this.age);

}

}

有这么调用的,//在o对象的作用域中构造Person对象

var o = new Object();

Person.call(o,12,"wang");

o.show();


其实呢Person.call(o,12,"wang");这句话的意思就是用Person对象(实际上一般用方法名来调,但是function还是一个对象,所以才有了属性和方法,否则对于一个方法又调了call()方法不奇怪吗?一般来说常用的function的固有属性有:length,prototype,方法有:call,apply),调用了call方法,call方法需要两种参数,第一个也是一个对象(意思就是把当做参数传进来的对象当成是调用call方法的方法的作用域,就是说,a.call(b,1,2,),a拥有了b的作用域,所以用b能调到a的方法),第二种就是参数,不同于apply(作用和call相同,也需要两种参数,第一种是作用域对象,第二种是作用域带过去a方法的参数,可以直接用arguments或者[1,2]数组)的是,call方法需要把参数全部一一列出


var a = {
t1:1,
t2:2,
showT:function(){
//showTT.call(this);
alert(this.t1+"showT");
}
}
//a.showT();
var t1=3,t2=4;
function showTT(){
a.showT.call(this);
alert(this.t1*this.t2+"showTT");
}
showTT();
//showTT.call(a);

作用域大转小,小转大,call方法最大的作用


var b = 5;
    var a = {
    b:10,
    c:function(){
        return function(){
            alert(this.b);
        }
    }
}
问:a.c()();的结果是什么----------------------经典~~~~~


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值