<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