愛奇藝 2020年2月13日

愛奇藝 2020年2月13日

  1. 自我介紹

  2. =====

  3. call和apply

  4. 幾種繼承方式及優缺點
    原型鏈繼承: 將父類的私有屬性和公有方法都作爲自己的公有屬性和方法,但無法實現多繼承無法向父類構造函數傳參父類所有屬性將被共享
    構造函數繼承: 解決了原型鏈繼承中子類實例共享父類引用屬性的問題,可以向父類傳遞參數,可以多繼承(call多個父類對象),但只能繼承父類的實例屬性和方法,不能繼承原型屬性和方法
    組合繼承: 通過調用父類構造,繼承父類的屬性並保留傳參的優點,然後通過將父類實例作爲子類原型,實現函數複用。需要修復構造函數指向,會調用兩次構造函數。 優化:通過父類原型和子類原型指向同一對象Fish.prototype = Animal.prototype,子類可以繼承到父類的公有方法當做自己的公有方法,而且不會初始化兩次實例方法/屬性,但是沒辦法辨別是實例是子類還是父類創造的使用instanceof Fish/Animal都返回true。
    寄生繼承:在組合繼承的基礎上進行優化,Fish.prototype = Object.create(Animal.prototype),同樣的,需要修復構造函數指向。

    手動實現一個object.create
    Object.create =  function (o) {
        var F = function () {};
        F.prototype = o;
        return new F();
    };
    
  5. React組件傳值和數據共享

  6. redux原理

  7. 數組排序(時間複雜度/空間複雜度):選擇排序,時間複雜度O(n^2),空間複雜度O(1)

      const arr = [2, 1, 4, 3, 6, 5, 7, 0];
      sort(arr); // [0, 1, 2, 3, 4, 5, 6, 7]
      function sort(arr) {
        for (var i = 0; i < arr.length; i++) {
          for (var j = i + 1; j < arr.length; j++) {
            if (arr[i] > arr[j]) {
              var temp = arr[j];
              arr[j] = arr[i];
              arr[i] = temp;
            }
          }
        }
        return arr
      }
    
  8. 函數執行結果(變體,如果getFullname改爲箭頭函數,則會是什麼結果。箭頭函數與普通函數的區別)

    var fullname = 'John Doe';
    var obj = {
      fullname: 'Colin Ihrig',
      prop: {
        fullname: 'Aurelio De Rosa',
        getFullname: function(){
          return this.fullname;
        }
      }
    }
    console.log(obj.prop.getFullname()); // 'Aurelio De Rosa'
    var test = obj.prop.getFullname;
    console.log(test()); // 'John Doe';
    
  9. 寫一個繼承Animal的class/function,並在Animal的基礎上有自己的bark

    function Animal(name, energy){
      this.name = name;
      this.energy = energy;
    }
    Animal.prototype.eat = function(amount){
      console.log(`${this.name} is eating`);
      this.energy += amount;
    }
    Animal.prototype.sleep = function(length){
      console.log(`${this.name} is sleeping`);
      this.energy -= length;
    }
    A:
     function Fish(name, energy){
      Animal.call(this, name, energy);
    } 
    Fish.prototype = new Animal();
    Fish.prototype.bark = function(){
      console.log('this is bark');
    }
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章