js对象之call,apply方法

calll,apply都是对象借调方法,用法几乎一致,只有传入参数call是以逗号的形式,而apply是采用数组的形式传入参数

首先我们来看看call如何借调方法

<script>
    function Person(name,age){
        this.name=name;
        this.age=age;
        this.run=function(){
            console.log("借调run方法成功")
        }
        this.eat=function(a,b){
            console.log(a+b);
        }
    }
    function Student(){

    }
    var p=new Person();
    var stu=new Student();
    p.run.call(stu);
    p.eat.call(stu,"张三","大写的二");
</script>

这就是call带上参数和不带参数的借调方法,记住,借调方法的双方一定是对象,apply使用一样只是,传参时候使用数组的形式

下面来演示一下

  p.run.apply(stu);
    p.eat.apply(stu,["张三","大写的二"]);

这样就行了,注意被借调的不管是原型对象方法还是私有的方法只要是这个实例的属性里面有的都可以借调,换句话说,由构造函数实例化出来的内容都可以被借调,而这个实例出来的对象里面含有构造函数里面的内容和原型对象里面的内容。

有人硕这样一个一个的借调有点麻烦,那么,我们就采用的一种在构造函数copy一份你想要借调的对象的方法,说起来有点懵,下面上代码。

<script>
    function Person(name,age){
        this.name=name;
        this.age=age;
        this.run=function(){
            console.log("借调run方法成功")
        }
        this.eat=function(name,age){
            console.log(name+age);
        }
    }
    Person.prototype.k=function(){
        console.log("我是原型对象");
    }
    function Student(name,age){
        Person.call(this,name,age);
    }
    var stu=new Student('zhuyu',78);
    console.log(stu.name);
    console.log(stu.age);
    stu.run();
    stu.k();
   
</script>

通过这种方式,可以理解为,将构造函数的内容全部copy一份到本构造函数,大家想这不就是继承吗,瑕疵的地方在于,只继承了构造函数没有继承构造函数的原型对象中的方法属性,所以继承不成功,但是可以copy一份全部的内容。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值