javascriptに深く入り込んで対象に向かって、jsの原型チェーン、継承


階段は対象に向かう————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
 JS   ,             ,
                 
包装の対象————————————————————————————————————————————————————
               
  String Number Boolean
                ,                
    ,        

  
        var str = 'abc';
        str.num = 10;
        //        ,      num  ,      。
        //    String.prototype.num = 10;
        alert(str.num);
        //             ,            ,
        //    undefined
プロトタイプチェーン————————————————————————————————————————————————————————————————
            ,     

 ff  DOM    :__proto__(      )

        ,           ,          
  /  ,     ,   __proto__        ,  
      Object

Object            
    Object.prototype
対象に向かういくつかの常用属性と方法————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
obj.hasOwnProperty('name') :     /          。
         Object.prototype   

constructor :          
                  : 
            var str = '';
            alert(str.constructor===String);//true
      ,          ,      xxx.prototype.constructor
      , :
        function Person(){
        }
            Person.prototype.constructor=Person;
                         

         JSON
    Person.prototype = {
        attr1 : 10,
        fn1 : function(){}
    }
      Person      /    ,            。
             ,     .constructor       
    (             )  Object.constructor,  
         Object

       JSON        /   ,      construct
      ,     

    For in            prototype       
    (        )

        construtor  

instanceof :                  
      :
    person1 instanceof Person            true

                     
    var arr = [];
    arr instanceof Array //true

toString() : 
            

     Object    
                    ,           
         Object     

    Array   toString:          

    Number   toString(n):    n        

      toString      (  )
    var arr=[];
    alert( Object.prototype.toString.call(arr) );//[Object Array];

    Object.prototype.toString.call(arr)==='[Object Array]';
          

             :
        obj.constructor === Array;
        obj instanceof Array;
        //      iframe,  window.frames[i].Array;   
        Object.prototype.toString.call(obj) === '[object Array]'; 
受け継がれている———————————————————————————————————————————————
   :          ,    ,        
                 。
   :        ,              (    )

   : 
        :          .call():
        function Person(name,sex){
     
            this.name = name;
            this.sex = sex;
        }
        function Star(name,sex,job){
     
            Person.call(this,name,sex);
            //     this  ,function  Person  this  window
            this.job = job;
        }
        /     :
    【    】
                 ,
           JS     ,               
    Star.prototype = deepCopy(Person.prototype);

    【    】  
    JS       ,          java   

          :
        function Father(){
     
            this.name = '  ';
        };
        Father.prototype.callname = function(){
     
            alert(this.name); 
        };
        function Child(){
     };
        Child.prototype = new Father();//  
        var c1 = new Child();
        c1.callname();//  
      :c1    callname  ,   Child  callname  
    Child.prototype     callname  ,    new Father()
           ,              ,        
    Father.prototype  callname  ,     

      :
    Child.prototype = new Father();      Child   prototype
    ,  Child.prototype.constructor     ,  
    c1.constructor     ,            constructor,
      c1.constructor   Father。

                  Child.prtotype.constructor=Child;

      , this.name    [1,2,3];
                  
    var c1 = new Child();
    c1.name.push(4);

    var c2 = new Child();
    alert(c2.name);//1,2,3,4
                            
          c1  c2,     name           ,
                  new Father()  。     
          。      。

           ,             。
    function F(){};//1
    F.prototype = Father.prototype;//2
    Child.prototype = new F();//3
    Child.prototype.constructor = Child;//4
    //        4  
    1     F        。2  F    Father     ,
           。3     F        Child   。

      ,     Child->c1  c1.name,     F      
       name    ,  2   ,F        name    
     ,        undefined
       c1    callname,            Father.prototype
        Father.prototype  callname  。         
        。

               Child       Father.call(this);

    【    】
        function Father(){
     
            this.name = '  '; 
        }
        var f1 = new Father();

        var c1 = cloneObj(f1);
        c1.name = '  '
        //alert(c1.name)//  
        //alert(f1.name)//  

        var a = {
            name : 'a'
        };
        var b = cloneObj(a);
        b.name = 'b';
        alert(b.name);
        alert(a.name);

        function cloneObj(obj){
     
            function F(){
     };
            F.prototype = obj;
            return new F();
        }
    【        】
        :      new  new        

        :  new     

        :   new