JavaScript学习总结笔记之call、apply、继承

前言
JavaScript总结笔记篇仅是记载本人学习过程中的一些总结,为了梳理一下知识点,督促自己不断加强学习。文中有些是源自官网,有些是搜集资料,有些是个人观点,难免存在某些知识点疏漏或者是有错误的地方,如果错误之处,希望看到的小伙伴能及时提个醒,避免误导其他小伙伴,也希望我的总结能帮助到正在学或者是将要学习JavaScript的小伙伴们!大家一起努力,早日成为IT界的大神!

call、apply、继承

    • 一、call/apply
        • (一)作用:改变this指向
        • (二)区别:传参列表不同
    • 二、继承发展史
        • (一)原型链继承
          • 缺点:过多的继承了没用的属性
        • (二)借用构造函数
          • 1.不能继承借用构造函数的原型
          • 2.每次构造函数都要多走一个函数
        • (三)共享原型
          • 缺点:不能随便改动自己的原型
        • (四)圣杯模式 很重要
      • 文章持续更新中,敬请关注,谢谢阅读!

一、call/apply

(一)作用:改变this指向

(二)区别:传参列表不同

call:需要把实参按照形参的个数传进去

apply:需要传一个arguments

     function Person (name, age) {
         this.name = name;
         this.age = age;
     }

     var person = new Person( "xu", 18);
     var obj = {

     }
     Person.call(obj, "linw", 8);
     //控制台输出obj ——> name:"linw", age:8
     

二、继承发展史

(一)原型链继承

缺点:过多的继承了没用的属性
       
        Grand.prototype.lastName = "xu";
        function Grand () {
            
        }

        var grand = new Grand();

        Father.prototype = grand;
        function Father () {

        }
        
        var father = new Father();
        
        Son.prototype = father;
        function Son () {
            
        }
            
        var son = new Son();
        

(二)借用构造函数

1.不能继承借用构造函数的原型
2.每次构造函数都要多走一个函数
        function Person(name, age, sex) {
            this.name = name;
            this.age = age;
            this.sex = sex;
        }

        function Student(name, age, sex, grade) {
            //var this = Object.create(Student.prototype);
            Person.call(this, name, age, sex);
            this.grade = grade;
        }

        var student = new Student();

(三)共享原型

缺点:不能随便改动自己的原型
        Father.prototype.name = "lw";
        function Father() {

        }

        function Son() {

        }

        function inherit(Target, Origin) {
            Target.prototype = Origin.prototype;
        }

        inherit(Son, Father);
        var father = new Father();
        var son = new Son();

(四)圣杯模式 很重要

//圣杯模式
function inherit(target,origin){
function F(){};
F.prototype = origin.prototype;
target.prototype = new F();
target.prototype.constructor = target;
//原型上都有一个属性(constructor),指向他的构造函数
target.prototype.uber = origin.prototype
}//看origin究竟继承自谁,super是关键字,用
uber代替,表示超类
Father.prototype.lastName = 'xu';
function Father(){};
function Son(){};

inherit(son,father);
var father = new Father();
var son = new Son();

文章持续更新中,敬请关注,谢谢阅读!

你可能感兴趣的:(JavaScript学习总结)