码迷,mamicode.com
首页 > 其他好文 > 详细

包装对象与原型链

时间:2016-03-05 14:37:39      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:

首先我们可以看看平时我们常用的

    var str = hello;
    alert(typeof  str);    //string

    var str = new String("hello");
    alert(typeof  str);   //object

上面那个是表示基本类型string类型,下面这个是表示对象类型(String对象类型)

然而纵使是string基本类型,依然可以调用charAt等方法

var str = hello;
str.charAt(0);
str.indexOf(e);

这是为什么?

原因是:基本类型都有自己对应的包装对象 : String Number Boolean

也是说基本类型调用的方法,其实是挂载在它对应的包装对象上的。如下:

 charAt方法在js源码中定义其实是这样定义的。

var str = new String(hello);

alert(str.charAt(1));

String.prototype.charAt = function(){};

 

str.charAt(0);执行的具体过程如下图中所示:
//var str = ‘hello‘;
//str.charAt(0);  //基本类型会找到对应的包装对象类型,然后包装对象把所有的属性和方法给了基本类型,然后包装对象消失(过程就是这样的)

 

所以若是自己要定义一个方法,可以在原型上挂载一个方法,如下:

/*var str = ‘hello‘;

String.prototype.lastValue = function(){
    return this.charAt(this.length-1);
};

alert( str.lastValue() );  //o*/

所以下面这种写法就是不对了:

var str = ‘hello‘;

str.number = 10;

alert( str.number );  //undefined

 

原型链请见下篇。

包装对象与原型链

标签:

原文地址:http://www.cnblogs.com/wanliyuan/p/5244622.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!