美文网首页JavaScript学习笔记
第六章 面向对象的程序设计

第六章 面向对象的程序设计

作者: 张果果 | 来源:发表于2016-10-04 10:45 被阅读23次

    1.构造函数始终都应该以一个大写字母开头


    2.虽然可以通过对象实例访问保存在原型中的值,但却不能通过对象实例重写原型中的值


    3.在使用for-in循环时,返回的是所有能够通过对象访问的、可枚举的属性,其中既包括存在于实例中的属性,也包括存在于原型中的属性


    4.在创建自定义类型最常见的方式,就是将构造函数模式用于定于实例属性,而原型模式用于定义方法和共享的属性。这种方法最大限度地节省了内存,还支持想构造函数传递参数


    5.寄生构造函数模式,构造函数返回的对象与在构造函数外创建的对象没有什么不同,因此,不能依赖instanceof操作符来确定对象类型


    6.两种继承方式:接口继承和实现继承。接口只继承方法签名,而实现继承则继承实际的方法。ECMAScript只支持实现继承,主要依靠原型链实现的。


    7.构造函数、原型和实例的关系:每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针


    8.给原型添加方法的代码一定要放在替换原型的语句之后


    9.在通过原型链实现继承时,不能使用对象字面量创建原型方法,因为这样会重写原型链


    10.借用构造函数:在子类型构造函数的内部调用超类型构造函数


    11.组合继承:将原型链和借用构造函数技术组合到一起。使用原型链实现对原型属性和方法的继承,而通过借用构造函数来实现对实例属性的继承。其最大的问题就是无论在声明情况下,都会调用两次超类型构造函数:一次是在创建子类型原型的时候,另一次是在子类型构造函数内部。


    12.寄生式继承:创建一个仅用于封装继承过程的函数,该函数在内部以某种方式来增强对象,最后再返回对象


    13.寄生组合式继承:通过借用构造函数来继承属性,通过原型链的混成形式来继承方法。开发人员普遍认为寄生组合式继承是引用类型最理想的继承范式


    14.在没有类的情况下,可以采用下列模式创建对象:

    ①对象字面量:

    var person = {

            name: "Kaitlyn",

            age: 22,

            job: "Front - End Engineer",

            sayName: function(){

                    alert(this.name);

            }

    };

    缺点:使用同一个接口创建很多对象,会产生大量的重复代码。

    ②工厂模式:

    function createPerson(name, age, job){

            var o = new Object();

             o.name=name;

            o.age=age;

            o.job=job;

            o.sayName = function(){

                    alert(this.name);

            }

            return o;

    }

    var person1 = createPerson("Kaitlyn", 22, "Front - End Engineer");

    var person2 = createPerson("Greg", 27, "Doctor");

    缺点:该模式产生的所有对象的类型都是Object。

    ③构造函数模式:

    function Person(name, age, job){

            this. name=name;

            this. age=age;

            this. job=job;

            this. sayName = function(){

                    alert(this.name);

            }

    }

    var person1 = new Person("Kaitlyn", 22, "Front - End Engineer");

    var person2 = new Person("Greg", 27, "Doctor");

    缺点:每个方法都要在每个实例上重新创建一遍

    ④原型模式:

    function Person(){

    }

    Person.prototype = {

            name: "Kaitlyn",

            age: 22,

            job: "Front - End Engineer",

            friends = ["Greg", "Court"];

            sayName: function(){

                    alert(this.name);

            }

    }

    var me = new Person();

    缺点:所有实例在默认情况下都取得相同的属性值;对于包含引用类型值的属性来说,比如数组,若一个实例向数组中添加了一个字符串数组,那么另一个实例的数组也被修改了。

    ⑤组合使用构造函数模式和原型模式:

    function Person(name, age, job){

            this. name = name;

            this. age = age;

            this. job = job;

            this. friends = ["Greg", "Court"];

    }

    Person.prototype = {

            constructor: Person,

            sayName: function(){

                    alert(this.name);

            }

    }

    var person1 = new Person("Kaitlyn", 22, "Front - End Engineer");

    var person2 = new Person("Greg", 27, "Doctor");

    ⑥动态原型模式

    ⑦寄生构造函数模式

    ⑧稳妥构造函数模式


    15.继承模式:

    ①原型式继承:

    ②寄生式继承:

    ③组合式继承:

    ④寄生组合式继承:

    相关文章

      网友评论

        本文标题:第六章 面向对象的程序设计

        本文链接:https://www.haomeiwen.com/subject/fhqiettx.html