jsプロトタイプ


もっと読む
   jsプロトタイプはJsの中で非常に重要な概念であり、各関数(Js内の関数も対象)にはプロトタイプという属性がありますが、一般的にはnullという値がありますが、その中の属性と方法をすべてのインスタンスで共有することが非常に重要な機能です.
  原型と原型の鎖はOOP思想を体現しています.
原型の使い方1:
 
 var Calculator = function (decimalDigits, tax) {                                         
       this.decimalDigits = decimalDigits;    
        this.tax = tax;      
  };

 Calculator.prototype = {         
   add: function (x, y) {   
             return x + y;          
  },       
     subtract: function (x, y) {   
             return x - y;           
 }        };      

//  
var obj=new Calculator();
 alert(obj.add(1, 3));
 Calculatorオブジェクトのプロトタイプ属性付与対象の字面量は、Calculatorオブジェクトの原型を設定します. 
 原型の使い方2:
プロトタイプタイプタイプを付与する場合は、即座に実行する表現を使用して値を与えます.
Calculator.prototype = function () { 

} ();

 
 プライベートのfunctionをカプセル化して、returnという形で簡単な名前を暴露して、public/prvateの効果を達成します. .
Calculator.prototype = function () {    
        add = function (x, y) {     
           return x + y;           
 },           
 subtract = function (x, y) {   
             return x - y;         
   }          
  return {          
      add: add,      
       subtract: subtract  
          }        } ();      

//  
var obj=new Calculator();
alert(obj.add(11,3));
 
ステップ宣言:
var BaseCalculator = function () {  
  //                
  this.decimalDigits = 2;
};     
   //     BaseCalculator  2     
BaseCalculator.prototype.add = function (x, y) {  
  return x + y;
};
BaseCalculator.prototype.subtract = function (x, y) { 
   return x - y;
};
 
まず、BaseCalculatorオブジェクトを宣言しました.コンストラクタは小数位の属性decimalDigitsを初期化して、プロトタイプの属性によって2つのfunctionを設定します.それぞれadd(x,y)とsubtract(x,y)です.もちろん、前に述べた2つの方式のいずれかを使ってもいいです.私たちの主な目的は、BaseCalculatorのオブジェクトを本物のCalculatorの原型に設定する方法です.
 
var BaseCalculator = function() {   
 this.decimalDigits = 2;
};
BaseCalculator.prototype = {  
  add: function(x, y) {  
      return x + y;    
},    subtract: function(x, y) { 
       return x - y;   
 }};
 
var Calculator = function () {  
  //                
  this.tax = 5;
};      
  Calculator.prototype = new BaseCalculator();
 
CalculatorのプロトタイプはBaseCalculatorに向けられた一例であり、Calculatorにそのadd(x,y)とsubtract(x,y)の2つのfunctionを一体化させることを目的としているが、そのプロトタイプはBaseCalculatorの一例であるので、どれだけのオブジェクトを作成してもCalcutorのプロトタイプである.
var calc = new Calculator();
alert(calc.add(1, 1));
//BaseCalculator     decimalDigits  ,  Calculator        alert(calc.decimalDigits); 
 
上記のコードは、実行後、CalculatorのプロトタイプがBaseCalculatorの実例を指しているので、彼のdecimalDigits属性値にアクセスできます.もしCalculatorにBaseCalculatorの構造関数にアクセスしたくないなら、このように処理します.
var Calculator = function () { 
   this.tax= 5;
};
Calculator.prototype = BaseCalculator.prototype;
 
BaseCalculatorのプロトタイプをCalculatorのプロトタイプに付与することにより、Calculatorの実例ではそのデチマ・ディgits値にアクセスできなくなります.下記のコードにアクセスすると、エラーが発生します.
var calc = new Calculator();
alert(calc.add(1, 1));
alert(calc.decimalDigits);
 
原型を書き換える: 
 第三者のJSクラスを使う時、彼らが定義しているプロトタイプの方法は私達の要求を満たすことができません.しかし、このクラスから離れられないので、彼らのプロトタイプの一つまたは複数の属性またはfunctionを書き換える必要があります.私達は宣言を続ける同じaddコードの形で前のadd機能を書き換えることができます.
//    Calculator add() function 
Calculator.prototype.add = function (x, y) {  
  return x + y + this.tax;
};
var calc = new Calculator();
alert(calc.add(1, 1));