• 第二章 对象高级


    一、对象创建模式

    1.Object构造函数

     缺点:  
    /* 1. 组织形式不好 2. 没有类型 3. 内存开销大 4. 代码冗余 */ var obj = new Object(); obj.age=18; obj.name="zyy"; obj.say=function () { console.log("城市套路深 我要回农村 农村路更滑 人心更复杂") } var obj2 = new Object(); obj2.age=19; obj2.name="zyy"; obj2.say=function () { console.log("-----") }

     2.字面量

    缺点:

    /*
      2. 没有类型
      3. 内存开销大
      4. 代码冗余
    */

    改善:

    // 1. 组织形式比较友好

     
    var obj ={ name:"zyy", age:18, say:function () { console.log("----") } } var obj2 ={ name:"zyy2", age:38, say:function () { console.log("*****") } }

     3.工厂模式

    缺点: 
    /* 2. 没有类型 3. 内存开销大 */ 改善: // 1. 组织形式比较友好 // 4. 代码不冗余 function createObj(name,age,msg) { return { name:name, age:age, say:function (msg) { console.log(msg) } } } var obj = createObj("damu",18,"胡话"); var obj2 = createObj("zyy",48,"鬼话"); console.log(obj,obj2)

     4.自定义构造函数

    缺点:
    /* 3. 内存开销大 */ 改善: // 1. 组织形式比较友好 // 4. 代码不冗余 // 2. 拥有类型 function Person(name,age) { // var food; this.name =name; this.age =age; this.eat=function (food) { // var food; console.log(food) } } var damu = new Person("达姆",18); damu.eat("核桃"); var fyz = new Person("张艳英",48); fyz.eat("大嘴巴子"); // console.log(damu instanceof Person,fyz);

     5.自定义构造函数+原型链

     改善:   
    //
    1. 组织形式比较友好 // 4. 代码不冗余 // 2. 拥有类型 // 3. 内存开销相对减少 Person.prototype.eat=function (food) { console.log(this.name+"吃"+food) } function Person(name,age,food) { this.name =name; this.age =age; } var damu = new Person("达姆",18); damu.eat("核桃"); var fyz = new Person("张艳英",48); fyz.eat("大嘴巴子");

     6.create函数

    <script>
        var obj ={};// __proto__
        console.log(obj)
    
        // var 对象 = Object.create(obj)   
        //       会创建出一个对象  只是这个对象的隐式原型会被显式的指定  指定为obj
        var obj2 = Object.create({a:"a"})
        console.log(obj2)
    </script>

    二、继承模式

    1.原型链继承

    (1)继承套路

    1.定义父类型构造函数
    2.给父类型的原型添加方法
    3.定义子类型的构造函数
    4.创建父类型的对象赋值给子类型的原型
    5.将子类型原型的构造属性设置为子类型
    6.给子类型原型添加方法
    7.创建子类型的对象:可以调用父类型的方法

    (2)代码演示

     // 属性还是使用构造函数继承的方式
        // 函数使用原型链继承
        //  污染了父类
    
        Person.prototype.eat = function () {
            console.log("eat")
        };
        function Person(name,age) {
            this.name = name;
            this.age = age;
        }
    
        Teacher.prototype = Person.prototype;
        Teacher.prototype.teach=function () {
            console.log("teach")
        }
        function Teacher(classNo,name,age) {
            Person.call(this,name,age);
            this.classNo =classNo;
        }
    
    
        var damu = new Teacher("18_1128","达姆",18)
        console.log(damu.teach,damu.eat);

    2.构造函数继承

     function Person(name,age) {
            this.name = name;
            this.age = age;
            this.eat = function () {
                console.log("eat")
            };
        }
    
    
        function Teacher(classNo,name,age) {
            Person.call(this,name,age);
            this.classNo =classNo;
            this.teach=function () {
                console.log("teach")
            }
        }
        function Student(id,name,age) {
            Person.call(this,name,age);
            this.id =id;
            this.study=function () {
                console.log("study")
            }
        }
    
        var damu = new Teacher("18_1128","达姆",18)
        console.log(damu);
    
        var lxf = new Student("38","张艳英",18)
        console.log(zyy);

    3.组合继承(原型链+构造函数)

     // 属性还是使用构造函数继承的方式
        // 函数使用原型链继承
        //  污染了父类
    
        Person.prototype.eat = function () {
            console.log("eat")
        };
        function Person(name,age) {
            this.name = name;
            this.age = age;
        }
    
        Teacher.prototype = new Person();
        Teacher.prototype.constructor = Teacher;
        Teacher.prototype.teach=function () {
            console.log("teach")
        }
        function Teacher(classNo,name,age) {
            Person.call(this,name,age);
            this.classNo =classNo;
        }
    
    
        var p = new Person("张艳英",28)
        console.log(p.teach,p.eat);
    
        var damu = new Teacher("18_1128","达姆",18)
        console.log(damu.teach,damu.eat);
  • 相关阅读:
    农场灌溉问题(回溯)
    六数码问题(广搜_队列)
    求图像周长(回溯)
    六数码问题(回溯)
    花生米(四)
    活动安排(贪心算法)
    自我介绍
    三位老师
    培训期间
    工作十个月感触
  • 原文地址:https://www.cnblogs.com/fxiong/p/10158982.html
Copyright © 2020-2023  润新知