JSのprototypを整理して、callの使い方を深く理解します.

5254 ワード

JavaScriptが実現できるオブジェクト指向の特徴は、
・共有属性(public field)
・共有方法(public Method)
・プライベート属性(prvate field)
・プライベート方法(prvate field)
・方法再負荷(method overload)
・コンストラクタ
・イベント(イベント)
・単一継承(single inheit)
・子類親の属性や方法を書き換える
・静的属性または方法(static member)
例一(JavaScriptでは行動の追加が許可されているタイプ):タイプにプロポーションを使用してタイプのために行動を追加することができます.これらの挙動は、タイプのインスタンスでのみ実行されることができる.JSで許容されるタイプは、Aray、Boolean、Date、Enumerator、Error、Function、Number、Object、RegExp、Stringです.
Jsコード
  • <script type=「text/javascript」>
  • Object.prototype.Property=1;
  • Object.prototype.Method=function()
  • {
  • }
  • alert(1);
  • varobj=newObject()
  • alert(obj.Property)
  • obj.Method()
  • 例二(prototype使用の制限):例ではprototypeは使用できません.そうでないとコンパイルエラーが発生します.
    Jsコード
  • <script type=「text/javascript」>
  • varobj=newObject()
  • obj.prototype.Property=1;/Error
  • /Errer
  • obj.prototype.Method=function()
  • {
  • }
  • alert(1);
  • 小結:prototypeはここでクラスの構造方法の中であるフィールドに値を割り当てます.フォーマットは「クラス名.protype.属性名」です.
    例10(どのように1つのタイプを他のタイプに継承するか):この例は、1つのタイプが他のタイプからどのように継承されるかを示している.
    Jsコード
  • <script type=「text/javascript」>
  • functionAClass()
  • {
  • }
  • this.Propty=1;
  • this.Method=function()
  • {
  • }
  • alert(1);
  • functionAClass 2()
  • {
  • }
  • this.Propty 2=2;
  • this.Method 2=function()
  • {
  • }
  • alert(2);
  • AClass.2 prototype=newAClass()
  • varobj=newAClass 2()
  • alert(obj.Property)
  • obj.Method()
  • alert(obj.Propty 2)
  • obj.Method 2()
  • 小結:prototypeはここではクラスで親類を継承するのに相当します.フォーマットは「クラス名.protype」です.
    上記の参考住所:http://blog.csdn.net/tianyitianyi1/article/details/6929916
    javascriptの方法は三つの種類に分けられます.
    a種の方法
    bオブジェクトの方法
    c原型の方法
    例:function People/
    ここの相はPeopleクラスを定義しました.
    {
    this.name=name;
    //対象方法
    this.Introduce=function(){
    alert(「My name is」+this.name);
    )
    )
    //種類の方法
    People.Run=function(){
    alert(“I can run”)
    )
    //原型の方法
    People.prototype.IntrodceChinese=function()
    alert(「私の名前は」+this.name);
    )
     
    //テスト
    var p 1=new People("Windking")
    p 1.Introduce()
    People.Run()
    p 1.IntroducChinese()
    function People(name)
    {
    this.name=name;
    //    
    this.Introduce=function(){
    alert("My name is "+this.name);
    }
    }
    //   
    People.Run=function(){
    alert("I can run");
    }
    //    ,                 
    People.prototype.IntroduceChinese=function(){
    alert("     "+this.name);
    }
    
     
    
    <script type="text/javascript">
    
    function baseClass()
    {
        this.showMsg = function()
        {
            alert("baseClass::showMsg");   
        }
       
        this.baseShowMsg = function()
        {
            alert("baseClass::baseShowMsg");
        }
    }
    baseClass.showMsg = function()
    {
        alert("baseClass::showMsg static");
    }
    
    function extendClass()
    {
        this.showMsg =function ()
        {
            alert("extendClass::showMsg");
        }
    }
    extendClass.showMsg = function()
    {
        alert("extendClass::showMsg static")
    }
    
    extendClass.prototype = new baseClass();
    var instance = new extendClass();
    
    instance.showMsg(); //  extendClass::showMsg
    instance.baseShowMsg(); //  baseClass::baseShowMsg
    instance.showMsg(); //  extendClass::showMsg
    
    baseClass.showMsg.call(instance);//  baseClass::showMsg static
    
    var baseinstance = new baseClass();
    baseinstance.showMsg.call(instance);//  baseClass::showMsg
    
    </script>
    
    
    //  var p1=new People("Windking");p1.Introduce();People.Run();p1.IntroduceChinese();
    
    obj1.func.call(obj)  
    
        obj  obj1,  func  
    
    <span style="color:#FF0000;"><strong>       ,           obj1.func   ,      ,
      obj1     obj</strong></span>
      onDblClickRow:function(rowIndex, rowData){//                   
    
     var row_dialog = $('#damageDialog').datagrid("getSelected");    
    
      var documents = getFramesDom($('#formCode').val());                
    
    documents[0][callbackFunc].call(this);               }
             dom,       dom    ,    
    
        
    
    <script type="text/javascript">
    
    function baseClass()
    {
        this.showMsg = function()
        {
            alert("baseClass::showMsg");   
        }
       
        this.baseShowMsg = function()
        {
            alert("baseClass::baseShowMsg");
        }
    }
    baseClass.showMsg = function()
    {
        alert("baseClass::showMsg static");
    }
    
    function extendClass()
    {
        this.showMsg =function ()
        {
            alert("extendClass::showMsg");
        }
    }
    extendClass.showMsg = function()
    {
        alert("extendClass::showMsg static")
    }
    
    extendClass.prototype = new baseClass();
    var instance = new extendClass();
    
    instance.showMsg(); //  extendClass::showMsg
    instance.baseShowMsg(); //  baseClass::baseShowMsg
    instance.showMsg(); //  extendClass::showMsg
    
    baseClass.showMsg.call(instance);//  baseClass::showMsg static
    
    var baseinstance = new baseClass();
    baseinstance.showMsg.call(instance);//  baseClass::showMsg
    
    </script>
    
    
    
        :http://www.cnblogs.com/yjf512/archive/2011/06/03/2071914.html