zoukankan      html  css  js  c++  java
  • 第二章 对象高级

    一、对象创建模式

    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);
  • 相关阅读:
    OSCP Learning Notes Buffer Overflows(3)
    OSCP Learning Notes Buffer Overflows(5)
    OSCP Learning Notes Exploit(3)
    OSCP Learning Notes Exploit(4)
    OSCP Learning Notes Exploit(1)
    OSCP Learning Notes Netcat
    OSCP Learning Notes Buffer Overflows(4)
    OSCP Learning Notes Buffer Overflows(1)
    OSCP Learning Notes Exploit(2)
    C++格式化输出 Learner
  • 原文地址:https://www.cnblogs.com/fxiong/p/10158982.html
Copyright © 2011-2022 走看看