JS面向对象及原型链结构图(一)

1.面向过程和面向对象:面向过程每一步都要参与其中;面向对象只注重结果,不管过程如何实现;二者都是解决问题的一种思路。

2.面向对象三大特点:

封装:作用:复用和信息隐藏;封装,将客观事物封装成抽象的类,且类能把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。

继承:它可以使用现有类的所有功能,并在不用重新编写原来的类的情况下对这些功能进行扩展;通过继承创建的新类称为“子类”或“派生类”;被继承的类称为“基类”、“父类”或“超类”;继承的过程,就是从一般到特殊的过程;继承的方式:混入式继承(拷贝继承)、原型式继承、原型链继承、call继承(经典继承)、组合继承、class继承。

多态:多种形态,同一个操作,作用于不用的对象,产生不同的行为。

3.原型链结构图

(1)每一个构造函数都有一个属性prototype,指向它的原型对象;

(2)每一个实例化对象都有一个__proto__属,指向它所属类的原型对象;

(3)每一个原型对象都有一个constructor属性,指向它的构造函数本身

原型链图示:

 

 

 

4.如果要在构造函数原型对象上添加多个方法,可以以对象的形式添加,此时要修改构造函数原型对象的指向,添加constructor指向构造函数

 // 构造函数
function Person(name, age) {
            this.name = name;
            this.age = age;
        }
Person.prototype = { //Person为自定义构造函数,把方法放在一个对象里面
            constructor: Person, //修改指向,强制修改Person实例化对象的指向  如果不修改指向 则实例化对象指向Object
            show:function(){
                console.log("姓名:"+this.name + ",年龄:"+this.age);
            },
            info:function(){
                console.log("姓名:"+this.name + ",年龄:"+this.age);
            }
   }

原型图示:

 

 

 

5.安全扩展内置对象,拿Array举例,在它原型上挂载方法---实现共享,这种方法实际上不是很安全,如果挂载的方法过多会影响检索速度。通常解决方法是自己定义一个构造函数,

在原型上封装我们要使用的方法,这样就不会影响别人使用Array避免检索时间太长。让它继承 new Array(),使用继承过来的方法。
  function MyArray(){ //定义一个构造函数 
        }
  MyArray.prototype = new Array();//继承 new Array()  为了使用它的方法  
  MyArray.prototype.getLength = function(){
            return this.length;
        }

原型图示:

 

 

posted @ 2020-06-19 15:28  养猪的狗子  阅读(423)  评论(1编辑  收藏  举报