jsの基本タイプ、引用タイプ、基本包装タイプ

1931 ワード

基本タイプ:Unidefined、Null、Boolean、Number、Stering
引用タイプ:Object、Aray、Date、RegExpなど、はっきり言ったら対象です.
基本包装タイプ:Boolean、Number、Stering
次のように
var str = 'hello'; //string     
var s2 = str.charAt(0);
alert(s2); // h
上のstringが基本的なタイプなのは間違いないですが、それがcharAt()を呼び出せる方法は何ですか?基本タイプの中に三つの特殊な存在があるからです.この三つの基本タイプは自分の包装対象があります.またいつでも呼び出しを待ちます.包装の対象は、つまり対象です.属性と方法があります.このプロセスはどうやって発生しますか?実は楽屋でこっそり発生しました.
//          :
var str = 'hello'; //string     
var s2 = str.charAt(0); //                       :
( 
 var _str = new String('hello'); // 1            ,                        
 var s2 = _str.chaAt(0); // 2                    ,      s2.
 _str = null;  //    3                 , str =null; 
 ) 
alert(s2);//h 
alert(str);//hello    
これは一瞬の動作ですが、文字列自体の値は実際には変わりません.次のような動作をしました.これも文字列ごとの方法が文字列自体を変えていない理由です.
このように、引用タイプと基本包装対象の違いは、生存期間引用タイプが作成した対象が、実行期間中ずっとメモリにあり、基本包装対象は一瞬だけ存在していることが分かります.
したがって、私たちは直接に基本タイプに追加することができません.
var str = 'hello';
str.number = 10; //               number ,        
{ 
 var _str = new String('hello'); // 1            ,                        
  _str.number = 10; // 2                               
 _str =null; // 3         
 }
alert(str.number); //undefined            ,            ,             
{ 
 var str = new String('hello'); // 1         ,          ,      hello  
 str.number = undefined   // 2           number    ,        ,     ,       ;      
 str =null; // 3         
 }
では、基本的なタイプに方法や属性を追加するにはどうすればいいですか?答えは基本的な包装対象の原型の下に加えて、各対象に原型があります.
//                          
var str = 'hello';
String.prototype.last= fuction(){ 
    return this.charAt(this.length);
}; 
str.last(); // 5       ,            
{ 
    var _str = new String('hello');//         ,new            ,
    _str.last();  //                      
    _str =null; //         
}