• JS面向对象组件(一) ---包装对象与原型链


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

        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

    原型链请见下篇。

  • 相关阅读:
    什么是香港3c专线精品网和3c直连网络服务器
    服务器被攻击后处理办法
    服务器Linux系统安全维护基础知识介绍
    服务器宕机原因分析
    公网,专用,共享独立IP介绍
    服务器内存种类和各自特性
    自主组装服务器行不行
    英语网址大全收藏
    【分享】地产集团公司LOGO设计
    星际争霸2logo在线制作
  • 原文地址:https://www.cnblogs.com/wanliyuan/p/5244622.html
Copyright © 2020-2023  润新知