zoukankan      html  css  js  c++  java
  • 手记面对对象编程

    对于面对对象的基础,

    什么是面对对象的编程的思想那,就是每一个对象都有他特有的方法,和属性。那编程的思想就是,我不去管你的方法原理,比就如,吹风机,可以吹风,我就拿了吹风,不用去管他怎么能吹出风。只要知道怎么用就行!

    对象的方法,知道有什么用,需要的时候拿过来用就好!

    创建对象的方法!

    对象字面量的创建方法比较常用!

    可以看出每一次创建对象我们都需要new 一下,减少new的次数,工厂模式

    工厂模式也是有俩个缺点的

    每个对象都有一套自己的方法,浪费资源(虽然对于现在的计算机来说不算什么,但我们尽量将设计做到最好就行了。
    这里为什么说每个对象都有自己的一套方法呢,是因为创建function()的时候其本质是通过new Function()来创建的,
    会诞生一个新的函数对象,所以每个对象的方法是不一样的,这样就存在资源浪费的问题了。
     
    就比如 str = function(){} = str = new function(){}
     
    还有就是构造函数模式

    他们有各自的优点也有缺点,看合适的地方使用。

    还有就是原型创建对象(这里就是构造继承和原型继承的组合  ,下面会就会讲到)

    这里因为调用的都是返回值,所以,都是undefined  ,所以比较为true  

    编程小练习  数组求和

    基础的基本上就这些

    然后我就是遇到关于类的这个问题,

    类是什么?什么是类?类是方法?类是什么呢?

    JS中其实是没有类的概念的,所谓的类也是模拟出来的。特别是当我们是用new 关键字的时候,就使得“类”的概念就越像其他语言中的类了。

    类式继承是在函数对象内调用父类的构造函数,使得自身获得父类的方法和属性。call和apply方法为类式继承提供了支持。通过改变this的作用环境,使得子类本身具有父类的各种属性。

    类可以是一个函数,比如上面的构造函数中的d就是一个类。

    还有一个共同点就是,原型他是所有类都有的一个属性;

    类的三大属性,继承、抽象、多态;

    继承:创建一个或多个类的专门版本类方式称为继承(Javascript只支持单继承)。 创建的专门版本的类通常叫做子类,另外的类通常叫做父类。

    在Javascript中,继承通过赋予子类一个父类的实例并专门化子类来实现。在现代浏览器中你可以使用 Object.create 实现继承.(出自 MDN web docs javascript面对对象编程);

    类式继承

    原型继承在开发中经常用到。它有别于类继承是因为继承不在对象本身,而在对象的原型上(prototype)。每一个对象都有原型,在浏览器中它体现在一个隐藏的__proto__属性上。在一些现代浏览器中你可以更改它们。比如在zepto中,就是通过添加zepto的fn对象到一个空的数组的__proto__属性上去,从而使得该数组成为一个zepto对象并且拥有所有的方法。话说回来,当一个对象需要调用某个方法时,它回去最近的原型上查找该方法,如果没有找到,它会再次往下继续查找。这样逐级查找,一直找到了要找的方法。 这些查找的原型构成了该对象的原型链条。原型最后指向的是null。我们说的原型继承,就是将父对像的方法给子类的原型。子类的构造函数中不拥有这些方法和属性。

    另外的一种模式,是结合类继承和原型继承的各自优点来进行对父类的继承。用类式继承属性,而原型继承方法。这种模式避免了属性的公用,因为一般来说,每一个子类的属性都是私有的,而方法得到了统一。这种模式称为组合模式,也是继承类式常用到的一种方法。

    在上面的时候有写过。

    抽象:抽象是允许模拟工作问题中通用部分的一种机制。这可以通过继承(具体化)或组合来实现。
    JavaScript通过继承实现具体化,通过让类的实例是其他对象的属性值来实现组合。

    多态:就像所有定义在原型属性内部的方法和属性一样,不同的类可以定义具有相同名称的方法;方法是作用于所在的类中。

    并且这仅在两个类不是父子关系时成立(继承链中,一个类不是继承自其他类)。

    // js多态 : 同一操作作用在不同的对象上有不同的解释和不同的结果
    //思想:将做什么和谁去做以及怎么做分离,比如动物发声

    var a =function(animal){
    animal.sound(); //抽象方法
    }

    var Duck = function(){} //创建鸭子

    // 创建鸭子的方法
    Duck.prototype.sound = function(){
    console.log("嘎嘎嘎");
    }
    var Chicken = function(){} //创建鸡
    Chicken.prototype.sound = function(){
    console.log("咯咯咯");
    }

    a(new Duck()); //发声
    a(new Chicken()); //发声

    new 和  Obeject.create

     “new关键字掩盖了Javascript中真正的原型继承,使得它更像是基于类的继承。

    其实new关键字只是Javascript在为了获得流行度而加入与Java类似的语法时期留下来的一个残留物”。作者推荐我们使用Object.create方法创建或者实例化对象。露珠做过测试,使用new和使用object.create方法都是将对象添加到原型上去

    在使用  Object.create方法创建属性和方法都在原型上。

    var e = {

      a: 'father',
      b: function() {
         alert(this.a);
       }
    }
     
    var obj = Object.create(e);
    console.dir(obj);
     
     
  • 相关阅读:
    回味Python2.7——笔记3
    回味Python2.7——笔记2
    tensorflow softmax_cross_entropy_with_logits函数
    tensorflow l2_loss函数
    tensorflow l2_normalize函数
    tensorflow bias_add应用
    Hadoop Shell命令
    在Linux上安装ant环境
    调整虚拟机中Linux的分辨率
    安装virtualBox 增强包
  • 原文地址:https://www.cnblogs.com/chenyudi/p/11068349.html
Copyright © 2011-2022 走看看