<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