オブジェクト指向白い目(2)

オブジェクト指向三つの特徴:
  オブジェクト指向プログラミングの考え方の理解では、我々は、オブジェクト指向とオブジェクト指向は何のため深い理解の三つの特徴を理解するために継続

  要約:の問題の核心を把握
      者が記述したときに、私たちが行くべきかを説明したいと思いますどのように?この男の体のあらゆる臓器、およびすべての経験で書き出されていませんか?その後、私はあなたが私を知りたい場合は、私には、少なくとも2冊の本を書く、と言うあえて
      説明したが、3つの機能で私たちのオブジェクト指向の抽象化あなたはあまりにも多くの問題を必要としませんが、あなたはこの人の私を知っている必要があります名前、年齢、外国貿易だけでなく、その上にいくつかの重要な情報。それはあなただけ発行する必要があることを意味
      する抽象と呼ばれ、その上に私たちの手を得るその一部のコアを、


  包装:内部実装を考慮していない、唯一の機能の利用を検討する
      あなたは、エンジンが動作するかどうかを知りたいときに我々は車を運転するとき?
      私たちは、あなたがその回路構成かどうかを知りたいとき、テレビの電源をオンにすると?
      私たちは、あなたがコンピュータのハードウェア・コンポーネントに堪能になりたいかどうか、コンピュータ上で再生すると?
      我々はゲームをプレイするときは、原則として、プログラムかどうかを実装する必要があります理解できますか?
      実際には、我々は内部構造の一部を理解する必要はありません問題のいくつかよりは、実際には、包装にも当てはまります。いくつかの良い機能パッケージ、口を出ます

  継承:新規オブジェクトの既存のターゲットからの継承
      、それは継承しています、次は自分自身を言わなければならない、私はいつも私の家族は大家族の億万長者の資産だと思った、とすべてが私は両方の父を経験しています私は小さな三十年よりも速くなりました良い気性を、配置されました。私は私がことが判明し
      すぎて、実際には、最高の理解はあなたがあなたの父の不動産を継承することができるということですか、あなたの父の特集番組のいくつかあまりにも継承されたと思います

  多型:何の多型が存在しないため、ハッハッハ、あなたは、非常に幸運ではJavaScript


まあ、オブジェクト指向の三つの特徴を理解するために行われ、それでは、本当に、本当に見てみましょうすると、オブジェクト指向のコードを記述する方法であります

コンストラクタ:
  最初に、コンストラクタをチャットしましょう、というようにダウン?コードを書くためのオブジェクト指向の考え方についてその話を言っていない場合は?どのように今、彼らは、コンストラクタをさまよいますか?
  オブジェクト指向のプログラミングスタイルは、新しいキーワードから開始することですので、私たちは一歩一歩を行く、若者を心配しないでください

コンストラクタは何ですか?
  コンストラクタと呼ばれる新しい機能を呼び出すことにより、

  コンストラクタの話で、我々は最初のオブジェクトを作成する方法を質問、を考えるとき?一部の学生は、これは単純ではない、annai上の問題は自分自身が少し落ち着き魂を得るのを助けることができなかった聞いたことありますか?
  新しい新しいオブジェクトOBJ = VAR();
  VAR OBJ =オブジェクト();
  VAR OBJ = {};   私の要求が再びアップグレードすることを、そんなに以来良いが、あなたは私が人の説明に異議を知って使用することはできませんか?これは、あなたとあなたの若い心がアップannaiことができませんでした時間です!  OBJ = {VARの      名: "ボーエン"、      年齢: "18です"、      セックス: "ハンサム"、      ショー:機能(){         はconsole.log( "ボールドウィンストリートが最も美しいクラスです")      }     }
  








  それはそれの毎分を終えて感じていないですか?とても良い、私はこのアップグレードを必要とする、あなたは私の10の個人的な記述を与えます!これは、あなたがコピーして貼り付けるようになった時ではないでしょうか?その後、フルスクリーンとのコードを貼り付け?これはなぜでしょうか?
  私たちは、パッケージを行うことは困難ではないでしょうか?

  関数者(名前、年齢、性別){     VAR OBJ =新しいオブジェクト();     obj.name =名前;     obj.age =年齢;     obj.sex =セックス。
    

  


    =関数obj.showName(){
      にconsole.log(+ this.name "私の名前です")
    }

    =関数obj.showAge(){
      にconsole.log( "私の年齢" + this.age)
    }

    OBJを返します;
  }

 



  この時点で、あなたは、あなたとラインと感じていないですか?あなたは、特に強力な感じ?実際には、この方法は、実際にファクトリ関数で、我々は徐々に何を引き継ぐことができます

   関数者(名前、年齢、性別){     //原料      VAR OBJ =新しいオブジェクト(); //加工      obj.name =名;       obj.age =年齢;       obj.sex =セックス。
  

      


      =関数obj.showName(){
        にconsole.log(+ this.name "私の名前です")
      }

      obj.showAge = function(){
        console.log("我的年龄"+this.age)
      }
      //出厂
      return obj;
    }
  这时候是不是问题就完美的解决掉了呢?不不不,问题才刚刚开始,因为我刚才说过了面向对象的编程风格都是从一个关键字 new 开始的 很明显我们在调用这个函数的时候根本没有用到new这个关键字。

  那么问题又来了,为什么非要扯上这个new 难到没有这个new就不行吗?不要急躁我们一步一步来

  首先我们把问题列出来看看问题在哪?

    1、在调用这个函数的时候我们没有用 new 而new这个关键字在函数的内部使用了。那么我们能不能把这个new给拿出来?

    2、上面的栗子中有一个showName方法。那么每次调用这个方法的时候showName方法是否为同一个方法?
      如:var b1 = person(name,age,sex); var b2 = person(name,age,sex);
        alert(b1.showName == b2.showName)//false

    既然问题列出来了,那么我们就去解决这2个问题

  1、在调用这个函数的时候我们没有用 new 而new这个关键字在函数的内部使用了。那么我们能不能把这个new给拿出来?

    问题一:
    为什么我非要在调用函数的时候要加一个new呢?好我来解决下这个问题

 

   、  


    通过这张图我们很明显就可以看出了区别:
      普通函数调用的时候this的指向是window 而构造函数调用的时候this的指向是这个对象
       普通函数没有return的时候返回值是undefined 而构造函数的返回值想自己本身这个对象 

    为什么构造函数没有return却能够有返回值呢?
      因为构造函数在调用的时候系统内部自动return出了一个this,而这个this就是指的这个对象
 

   现在我们知道了调用函数的时候加new 和不加new的区别了那我们就来改上面的代码!
            
        

                             

打印结果是:宝云 18

好累啊!!!!终于解决完第一个问题了,那么我们继续来解决第二个问题

2、上面的栗子中有一个showName方法。那么每次调用这个方法的时候showName方法是否为同一个方法?

  我们先来验证一下是否为同一个方法

         

  为什么会是一个false呢???如果你听过凡尘老师讲课的话,在ES6的一张说过一道面试题。

  创建构造函数的时候js执行了那些操作?
    1、在内存中开辟了一块空间

    2、把this的指向指向了它

  因为new一次就会开辟一块空间,你还指望他们相等吗?就相当于你盖了一个房子,然后买了一个100英寸的电视,然后你发小也盖了一个房子,然后也买了一个100英寸的电视,你难到能说他加的电视就是你家的么?


  既然知道了问题的所在那么我们就去解决这个问题。接下来我们在去扯扯数组

  我们都知道数组有好多方法共我们使用,例如 push pop shift.....那么数组有没有一种去重的方法共我们使用呢?例如就叫norepeat?

  

 

  不用试也应该知道根本没有这个方法。那么我们可不可以给数组加上这个方法呢?当然可以,首先我们要先知道push pop shift....等这些东西在数组的哪里放着。接下来我们学习
新的东西叫原型----prototype

  我们在页面上输出这样一句话,Array代表数组,也就是说来看下数组的原型。我看可以看下打印出来了什么东西;

            

        

 

  你会发现你找到了一个窝点,里面有好多我们熟悉的方法。那么我就可以肯定数组的那么方法是加在原型上面的。那么我们接下来就给数组添加一个norepeat方法
     

             

 


  那么别的数组可以使用这个方法吗?他们这个方法是一样的吗?接下来我们去验证这个问题!!!!

 

    

 

  经过验证准确无误!!!大功告成,这样我们终于把这两个问题解决完了,那么我们在从新写下我们最开始的那个工厂函数

 

    

 

  终于完成了!!!!码字码的好辛苦!!!等这不是说带我们用面向对象的思维写代码吗?怎么就结束了呢?

  其实上面的过程和步骤就是利用面向对象的思维去写的,我们稍微总结一波你们就懂了

    1、以前我们的全局变量都是为一个人进行服务的,但是现在我们把变量变成了属性,面向对象就可以对所有的人进行服务,而且全局变量会让你的程序变的特别慢,其实你也可以理解成婚前谁也不属于谁,但是婚后你就只属于对方了

    2、我们把所有的函数都加在了对象的原型上面,其实就相当于就每一个方法分割成了不同的模块。这个正好就是我们面向对象的编程思维


  截止到目前为止除了面向对象的继承没有讲到以外,其他的应该都已经说到了。如何你能接受这个两篇文章那么你就能用面向对象的思维去编写程序了!!!

  具体如何用 面向对象写程序呢?我大致分为以下几个步骤


    1、把面向过程的程序,改写成面向对象的形式
  
    2、改写成面向对象的几个条件
       a、所有的东西写在onload里面
       b、不能有函数嵌套,可以有全局变量


    3、 全局变量---》属性 函数---方法 onload ====构造函数

    4、改错

  今天就到此结束吧,太累了!!!!



おすすめ

転載: www.cnblogs.com/LiuBaoy/p/11249511.html