美文网首页
对象&原型

对象&原型

作者: 饥人谷_有点热 | 来源:发表于2017-06-25 16:08 被阅读0次

    1. OOP 指什么?有哪些特性

    OOP指的就是面向对象程序设计(英语:Object-oriented programming,缩写:OOP)是种具有对象概念的程序编程范型,同时也是一种程序开发的抽象方针。它可能包含数据、属性、代码与方法。对象则指的是类的实例。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性,对象里的程序可以访问及经常修改对象相关连的数据。

    特性:

    封装性:
    1.隐藏了某一方法的具体运行步骤
    2.利用接口实现消息的传入传出
    例子:

     /* 一个面向过程的程序会这样写: */
    定义 莱丝
    莱丝.设置音调(5)
    莱丝.吸气()
    莱丝.吐气()
    /* 而当狗的吠叫被封装到类中,任何人都可以简单地使用: */
    定义 莱丝 是 狗
    莱丝.吠叫()
    

    继承性:
    1.描述联结类的层次模型;
    2.通过抽象,表达共性,实现类的重用;
    3.通过子类增加方法和属性以及重写方法,表达差异性;
    例子:
    假设“狗”这个类有一个方法(行为)叫做“吠叫()”和一个属性叫做“毛皮颜色”。它的子类(前例中的牧羊犬和吉娃娃犬)会继承这些成员。这意味着程序员只需要将相同的代码写一次。
    在伪代码中我们可以这样写:

    类 牧羊犬:继承狗
    定义 莱丝 是 牧羊犬
    莱丝.吠叫()    /* 注意这里调用的是狗这个类的吠叫方法。*/
    

    回到前面的例子,“牧羊犬”这个类可以继承“毛皮颜色”这个属性,并指定其为棕白色。而“吉娃娃犬”则可以继承“吠叫()”这个方法,并指定它的音调高于平常。子类也可以加入新的成员,例如,“吉娃娃犬”这个类可以加入一个方法叫做“颤抖()”。设若用“牧羊犬”这个类定义了一个实例“莱丝”,那么莱丝就不会颤抖,因为这个方法是属于吉娃娃犬的,而非牧羊犬。事实上,我们可以把继承理解为“是”或“属于”。莱丝“是”牧羊犬,牧羊犬“属于”狗类。因此,莱丝既得到了牧羊犬的属性,又继承了狗的属性。

    我们来看伪代码:

    类 吉娃娃犬:继承狗
    开始
       公有成员:
          颤抖()
    结束
    类 牧羊犬:继承狗
    定义 莱丝 是 牧羊犬
    莱丝.颤抖()    /* 错误:颤抖是吉娃娃犬的成员方法。 */
    

    多态性:
    1.屏蔽子类的差异性,针对共性/接口编程;(向上转型)
    2.增强可扩展性;
    例子:
    例如,狗和鸡都有“叫()”这一方法,但是调用狗的“叫()”,狗会吠叫;调用鸡的“叫()”,鸡则会啼叫。 我们将它体现在伪代码上:

    类 狗
    开始
       公有成员:
           叫()
           开始
              吠叫()
           结束
    结束
    类 鸡
    开始
       公有成员:
           叫()
           开始
              啼叫()
           结束
    结束
    定义 莱丝 是 狗
    定义 鲁斯特 是 鸡
    莱丝.叫()
    鲁斯特.叫()
    

    这样,虽然同样是做出叫这一种行为,但莱丝和鲁斯特具体做出的表现方式将大不相同

    2. 如何通过构造函数的方式创建一个拥有属性和方法的对象?

    function People(name){
      this.name = name;
      this.sayName = function(){
        console.log(this.name);
      }
    }
    var p1 = new People('James');
    p1.sayName();//James
    /*
    执行 var p1 = new People('James')的时候发生了什么?
    p1 = {}
    p1.name  = 'James'
    p1.sayName = function(){
      console.log(p1.name)
    }
    return p1
    最后得到的p1 就是这样一个对象
    p1={
      name = 'James',
      sayName = function(){
        console.log(p1.name);
      }
    }
    */
    
    
    

    3. prototype 是什么?有什么特性

    prototype就是指通过调用构造函数而创建的那个对象实例的原型对象。
    它的主要特征是它里面包含所有实例共享的属性和方法,可以让所有对象实例共享它所包含的属性和方法。换句话说,不必在构造函数中定义对象实例的信息,而是可以将这些信息直接添加到原型对象中
    例子:

    function Person(){
    }
    
    Person.prototype.name = 'Mark';
    Person.prototype.age = '11';
    Person.prototype.job = 'Student';
    Person.prototype.sayName = function(){
        console.log(this.name);
    }
    
    var person1 = new Person();
    person1.sayName();//'Mark'
    
    

    4.画出如下代码的原型图

    function People (name){
      this.name = name;
      this.sayName = function(){
        console.log('my name is:' + this.name);
      }
    }
    
    People.prototype.walk = function(){
      console.log(this.name + ' is walking');  
    }
    
    var p1 = new People('饥人谷');
    var p2 = new People('前端');
    
    image.png

    5.创建一个 Car 对象,拥有属性name、color、status;拥有方法run,stop,getStatus

    function Car (name,color,status){
        this.name = name;
        this.color = color;
        this.status = status;
    }
    Car.prototype={
      run:function(){},
      stop:function(){},
      getStatus:function(){}
    }
    

    6. 创建一个 GoTop 对象,当 new 一个 GotTop 对象则会在页面上创建一个回到顶部的元素,点击页面滚动到顶部。拥有以下属性和方法

    gotop

    7.使用木桶布局实现一个图片墙

    照片墙

    相关文章

      网友评论

          本文标题:对象&原型

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