zoukankan      html  css  js  c++  java
  • 8.15继承

    一、原型继承:将父类的实例对象赋值给子类的原型,私有的公有的都在继承为公有的

    function Person(name){

      this.name=name;

    }

    Person.prototype.fn=function(){

      console.log(1)

    }

    var p1=new Person("zhang");

    function Son(){

      this.age=23;

    }

    Spn.prototype=p1;

    var s1=new Person;

    console.dir(s1.name)

    二、call 继承:

    call方法是函数/类天生自带的一个方法。将父类私有的继承为子类私有的

    function Person(name){

      this.name=name;

    }

    Person.prototype.fn=function(){

      console.log(1)

    }

    var p1=new Person("zhang");

    function Son(){

      this.age=23;

    Person.call(this);

    }

    var s1=new Son;

    console.dir(s1)

    三、冒充对象继承:

    将父类私有的和公有的都继承为子类私有的。使用for in

     

    function Person(name){
    this.name=name;
    }
    Person.prototype.fn=function(){
    console.log(1)
    }
    var p1=new Person("zhang");
    console.log(p1)
    for(var key in p1){
    console.log(key)//name fn
    } for in 可以遍历对象的公有属性 fn 就是公有的

    function Person(name){

    this.name=name;

    }

    Person.prototype.fn=function(){

    console.log(1)

    }

    var p1=new Person("zhang");

    function Son(){

    this.age=56;

    //this是子类的实例对象

    for(var key p1){

    this[key]=p1[key];

    }

    }

    var s1=new Son;

    console.log(s1)

    四、混合继承: 私有的继承为私有的,公有的和私有的再次继承为公有的

    Call继承和原型继承的结合

    function Person(){
    this.name="zhangsan"
    }
    Person.prototype.fn=function(){
    console.log(11111)
    }
    var p1=new Person;
    function Son(){
    Person.call(this) //私有的继承私有的
    }
    Son.prototype=p1;
    var s1=new Son;
    console.log(s1)

    五、组合继承:私有的继承为私有的 公有的继承为公有的

    私有继承借助call 公有继承为公有 不是原型赋值给原型。因为原型是对象,是复合数据类型,是地址赋值给了前者,导致二者指向同一个原型,得克隆

    Js中如何实现继承  var obj2=Object.create(obj1)

    var obj1={name:"dengpu"}
    var obj2=Object.create(obj1,{age:{value:23}});
    console.log(obj2)

    六、中间类继承

    function fn(a,b,c){

      arguments.__proto__=Array.prototype

      arguments.push(89)

      console.log(arguments)

    }

    fn(45,56,23)

    Callapply区别

    1. call可以传多个参数apply只能传两个参数,apply的第二个参数必须是数组
    2. Callapply都是修改函数中this的指向
    3. 第一个参数都是对象,用于替换函数整的this的,如果不想替换this写成null就行

    面试题

    var arr=[45,56,23,16,89,3];

    function getmin(a){

    var min=arr[0];//假如第一个最小

    for (var i=1;i<a.length;i++) {

    if (min>a[i]) {

    min=a[i]

    }

    }

    return min;

    }

    var sd=Math.min(arr)函数封装得到的

    --------------------------------

    var s=Math.min.apply(null,arr)一行代码得到数组中的最小值

    ---------------------------------------------------------------------------------------------

    私有的 公有的

    Fn.call(obj,fn的参数匹配); obj取代fn中的this然后调用fn

    function fn(){

      this.a=123;

      console.log(this.a)

    }

    var obj={a:56};

    fn.call(obj) //123

    console.log(obj.a) //123

     

  • 相关阅读:
    冲刺周2
    java 流
    java 线程控制方法
    java界面编程(下)
    java 界面编程(上)
    java数组
    java 异常
    java程序中的存储区
    java中稍微有些陌生的关键字
    IOCP服务器搭建
  • 原文地址:https://www.cnblogs.com/yuanyeds/p/11358021.html
Copyright © 2011-2022 走看看