美文网首页
call-apply 实现继承

call-apply 实现继承

作者: Christoles | 来源:发表于2019-03-01 14:08 被阅读0次

改变调用对象的两种方式:

JS可以通过 call 和 apply 方法来实现继承

  • call()
     ------ 语法: obj1.skill.call(obj2,arg1,arg2,...)
    * obj2:表示你要将this重新指向到的新对象;
    * arg1,arg2,...:表示当做skill的参数传入。
  • apply()
     ------ 语法: obj1.skill.apply(obj2,arr);将obj1的this指向obj2这个对象。
    * obj2:表示你要将this重新指向到的新对象
    * arr:表示数组或者类数组,数组里面的元素当做是skill的参数传入。

*** \color{red}{call 和 apply 的区别:第二个参数不一样!一个是数 一个是数组} ***


1. call()改变Math.this的指向

var arr=[3,8,1,18];
console.log(Math.max(arr));//NaN  --- 不能直接弹出数组中最大的数
var res = Math.max.apply(null,arr);//参数不能跳过传入,没有对象也要设置null才不会报错***
console.log(res);//18

2. apply()改变this的指向

var obj1={
    name:"bgg",
    skill:function(age,num){//传参
        console.log("你的名字:"+this.name+"\n年龄是:"+age);
    }
}
var obj2={
    name:"帅哥"
}
//调用:
obj1.skill.apply(obj1);//你的名字:bgg
obj1.skill.apply(obj2);//你的名字:帅哥  --- 改变this指向obj2!

obj1.skill.apply(obj2,[18]);//你的名字:帅哥  年龄是:18  --- 改变指向并传参
//注意:实参18必须加上中括号[],否则会报错 ***            
            /**
             * JS可以通过 call 和  apply 方法来实现继承

3.用call 测试对函数适用性

//测试对函数适用性
//顺便实现了一个继承
function Animal(name){
    console.log(this);
    this.name = name;//第一个this.name是属性,第二个name是值
    this.skill = function(){
    console.log(this.name);//打印出这个属性的值
    }
}
function Cat(name){
    // --- 构造函数里面的this是在实例化对象的时候才决定指向谁***
    Animal.call(this,name);//坑点 只能是this***  不能是Cat   意思是将对象指向 Cat
}

var test = new Cat("小猫");//实例化对象
var test = new Cat("小狗");//实例化对象
var test = new Cat("小熊");//实例化对象
test.skill();//小熊

相关文章

  • call-apply 实现继承

    改变调用对象的两种方式: JS可以通过 call 和 apply 方法来实现继承 call(): ------ ...

  • js中的继承-原型与原型链

    面向对象的语言支持两种继承方式,接口继承和实现继承js无法实现接口继承,只支持实现继承,主要通过原型链来实现。具体...

  • 原型相关(二)

    1.继承 继承方式:接口继承(只继承方法签名)实现继承(继承实际的方法)ECMAScript只支持实现继承,并且主...

  • js对象——继承(2)

    继承分为接口继承和实现继承,但由于接口继承只继承方法签名,而函数没有签名,所以ECMAScript只支持实现继承(...

  • 条款34:区分接口继承和实现继承

    区分接口继承和实现继承 c++的(公有)继承主要有两个意图:实现继承和接口继承。实现继承其实体现了面向对象封装的特...

  • 7、面向对象的程序设计3(《JS高级》笔记)

    三、继承 许多OO语言都支持两种继承方式:接口继承和实现继承。接口继承只继承方法签名,而实现继承则继承实际方法。由...

  • 类 继承

    构造函数 等价于 静态方法 相当于 继承 class实现继承 原型实现继承

  • 面向对象——继承

    许多OO语言都支持两种继承方式:接口继承和实现继承。接口继承只继承方法签名,而实现继承则继承实际的方法。ECMAS...

  • 高程三 关于原型链 阅读笔记

    许多OO语言都支持两种继承方式:接口继承和实现继承。接口继承只继承方法签名,而实现继承则继承实际的方法。由于函数没...

  • javascript代码积累

    一、javascript实现继承 1.基于原型链实现继承 2.基于属性和方法复制实现继承 二、javascript...

网友评论

      本文标题:call-apply 实现继承

      本文链接:https://www.haomeiwen.com/subject/apxduqtx.html