JavaScript作成対象の4つの常用モード例分析

3591 ワード

本論文の例は、JavaScriptがオブジェクトを作成するための4つの一般的なモードを示している.皆さんに参考にしてあげます.具体的には以下の通りです.
ここでは、Javascriptで作成されたオブジェクトの一般的なパターンをいくつか紹介します.工場モード、コンストラクションモード、プロトタイプモード、コンストラクタとプロトタイプを組み合わせたモード、ダイナミックプロトタイプモードなどがあります.
一.工場モデル
コードを見てください

function getMySon(name,sex){
  var o={};
  o.name=name;
  o.sex=sex;
  o.sayName = function(){
    alert(this.name);
  }
  return o;
}
son1 = getMySon('li ming','male');
son2 = getMySon('li hong','female');

これが工場モデルです.関数でオブジェクトを定義し、属性と方法を追加し、最後にこのオブジェクトを返します.このようなモードは、オブジェクトを作成するのに便利であるが、このインスタンスが誰によって作成されたのかを判断することができないという問題がある.
例えばson 1 intance of getMySonはtrueには戻らない.ここの例は確かにgetMySonがnewを通じて作成したのではなく、getMySonの中のoである.したがって、工場モデルは多くのオブジェクトを作成する必要があります.
では、どのようにしてオブジェクトを作成すれば正確な判断ができますか?次に、構造関数モードについて説明します.
二.コンストラクタモード
コードを見てください

function getMySon(name,sex){
  this.name = name;
  this.sex = sex;
  this.sayName = function(){
    alert(this.name);
  }
}
son1 = new getMySon('li ming','female');

これはコンストラクタモードです.呼び出し時にnewを使うことに注意してください.newコールを行う場合、以下のようなステップが行われる.
1.新たなオブジェクトを作成します.
2.構造関数のスコープを新しいオブジェクトに割り当てます.
3.コンストラクタ内のコードを実行する(getMySon.prototypeを介してこの新しいオブジェクトに属性を追加する)
4.新しいオブジェクトを返します.
このように生成された例は、son 1 instance of getMySonを使用して、インスタンスが誰によって生成されたかを判断することができる.
構造関数の使用には何の問題がありますか?newを使うたびに新しいオブジェクトが作成されますので、すべてのデータは異なるインスタンスの間で共有されません.しかし、関数sayNameにとっては複数を作成する必要はありません.空間を浪費します.
このようにして次のモデルを引き出した.
三.原型モード
コードを見てください

function getMySon(){}
getMySon.prototype.name = 'li ming';
getMySon.prototype.sex = 'female';
getMySon.prototype.sayName = function(){
  alert(this.name);
}

これがプロトタイプです.
プロトタイプパターンは、thisに属性および方法を追加し、プロトタイプはすべてのインスタンスによって共有され、それは一つしかない.
このように関数を一つだけにして、余分な空間を占有する必要はないということを実現しました.しかし、name、sexなどの属性はすべてのインスタンス間で共有する必要はなく、プロトタイプパターンを使ってこれらの属性を作成するのも不便です.
構造関数モードとプロトタイプモードを統合して、それぞれの利点を利用することができます.各インスタンスを共有する必要がなく、転送によって生成される属性を構造関数モードにおいて生成し、各インスタンスで共有する必要がある(例えば、方法)をプロトタイプモードで生成する必要があります.
三.コンストラクタとプロトタイプを組み合わせるモード
コードを見てください

function getMySon(name,sex){
  this.name=name;
  this.sex=sex;
}
getMySon.prototype.sayName(){
  alert(this.name);
}
son1=new getMySon('li ming','female');

これは構造関数とプロトタイプを組み合わせたモードです.この方法は構造関数モードとプロトタイプモードの利点を組み合わせています.これは最も一般的なオブジェクトを作成するモードです.
四.ダイナミックモデル
ダイナミックプロトタイプモードとは、コンストラクションとプロトタイプを組み合わせたモードのパッケージのことです.

function getMySon(name,sex){
  this.name = name;
  this.sex = sex;
  //            ,         。
  if(typeof sayName != 'function'){
    getMySon.prototype.sayName=function(){
      alert(this.name);
    }
  }
}
son1=new getMySon('li ming','female');

ここで動的プロトタイプモードと名づけられたのは、ゲットMySonが異なる呼び出しで変化するための動的なものである.ゲットMySonを初めて呼び出した時にのみ、sayName関数の定義が実行されます.本質的には、共有する必要がない構造関数によって定義され、共有する方法がプロトタイプによって定義されます.それらを一緒に置いただけです.を実装しました.
興味のある友達はまた、この駅のオンラインHTML/CSS/JavaScriptコードを使ってツールを実行できます.http://tools.jb51.net/code/HtmlJsRun上記コードの実行結果をテストします.
更にJavaScriptに関する内容については、当駅のテーマを見ることができます.「javascript対象入門教程」、「JavaScriptエラーとデバッグテクニックのまとめ」、「JavaScriptデータ構造とアルゴリズム技法のまとめ」、「JavaScript巡回アルゴリズムと技術のまとめ」及び「JavaScript数学演算の使い方のまとめ」
本論文で述べたように、JavaScriptプログラムの設計に役に立ちます.