天天看點

JavaScript什麼是包裝對象

<script>var str = 'hello';
        // 1、首先我們測一下str的資料類型
        alert(typeof str); // string 字元串類型
        /* * * * * * * * * * * * * * * * * * * * * * * * * * *
         * 既然是字元串類型,為什麼又會有方法呢?               
         * 我們知道方法前面必須是對象,也就是對象才有方法       
         * 基本類型是不能擁有方法的                          
         * 如果要是有方法的話,那麼在源碼當中應該怎麼寫?       
         * 我們此前都知道方法應該寫在構造函數對應的原型下面     
         * * * * * * * * * * * * * * * * * * * * * * * * * * */
        str.charAt(0);
        str.indexOf('e')
</script>      

今天我們聊聊基本類型為何會有方法,原型當中是如何設計的?

這就涉及到我們今天說的内容 包裝對象

包裝對象 :基本類型有自己對應的包賺對象,但是null和indefine是沒有包裝對象的

基本類型有:字元串 數字 布爾值 null undefine

字元串的包裝對象是 String

數字的包裝對象是 Number

布爾值的包裝對象是 Boolean

var str = new String('hello'); //通過new建立的肯定都是對象
        alert(typeof str); // Object 對象
        // 既然是對象,下面有方法也就是正常的
        alert( str.charAt(1) ); // e
        // 源碼當中是這樣設計的
        String.prototype.charAt = function()      

基本類型會找到對應的包裝對象類型,然後包裝對象把所有的屬性和方法給了基本類型,然後包裝對象消失

// var str = 'hello';
        // str.charAt(0); // 基本類型會找到對應的包裝對象類型,然後包裝對象把所有的屬性和方法給了基本類型,然後包裝對象消失

        // 如果說要給一個字元串添加方法的話,我們應該如何操作呢
        var str = 'hello';
        // 比如我要寫一個lastValue()方法,去找字元串後面最後一個字元
        // 寫到包裝對象的原型下面
        String.prototype.lastValue = function ()
          return this.charAt(this.length -1);
        };
        alert( str.lastValue() ); //彈出 o      
var str = 'hello';
str.number = 10; 
alert( str.number );       
str = 'hello';
       str.number = 10; //在基本類型的包裝對象下面建立一個對象
       alert( str.number ); //undefine
       // 為什麼會顯示undefine呢?
       // 首先走var str = 'hello';的時候沒有問題,str就是個基本類型
       // 走str.number = 10;的時候,這個基本類型要添加一個屬性,
       // 它就會這個基本類型所對應的包裝對象下面去建立一個對象,
       // 然後把這個10添加到對象下面,然後添加之後這個包裝對象就消失了,
       // 消失之後當我們再去調用str.number的時候,這個時候str.number又重新建立了一個對象,
       // 這個對象和剛才添加的對象并不是同一個對象,因為包裝對象消失了,他就會形成一個新的對象,
       // 這樣的話,這個新的對象下面是沒有的,是以是undefind      

繼續閱讀