zoukankan      html  css  js  c++  java
  • js包装类

    JS的数据类型:

    基本类型:Undefined, Null, Boolean, Number, String
    引用类型:Object, Array, Date, RegExp (其实就是对象)

    JS中只有对象才有属性和方法,原始值没有属性和方法
    那么我们平常求字符串的长度 用length属性不是没有问题吗?

     var str="hello world";
        var long=str.length;
         console.log(long);   //得出结果为11

    这是因为js中提供了三种特殊的引用类型(String Number Boolean)每当我们给原始值赋属性值时 后台都会给我们偷偷转换 调用包装类
    怎么进行“包装”的?

    举个例子 用事实说话吧:(注释的部分就是后台为我们偷偷干的事)

    复制代码
    var str="hello word";
     //var str = new String("hello world"); // 1.创建出一个和基本类型值相同的对象
     //var long = str.length; // 2.这个对象就可以调用包装对象下的方法,并且返回结给long变量
     //str = null;  //  3.之后这个临时创建的对象就被销毁了
    
     var long=str.length; //因为str没有length属性 所以执行这步之前后台会自动执行以上三步操作
     console.log(long);   // (结果为:10)
    
     //var str = new String("hello word"); // 1.因为下面有输出创建出str.length 而str不应该具有length这个属性 所以再次开辟空间创建出一个和基本类型值相同的对象
     //str.length=nudefined; // 2.因为包装对象下面没有length这个属性没有值,所以值是未定
     //str = null;  //  3.这个对象又被销毁了
    
       console.log(str.length) // (结果为:undefined)
    复制代码


    给基本类型添加属性和方法:

    可是我们如果想给基本类型添加属性和方法,又该怎么办呢?
    可以在基本包装类的原型上实现:

    当然 如果要计算字符串的长度这是完全没有必要的,你使用length属性就可以了 这里只是展示了一种 给基本类型添加属性的方法

    复制代码
    //给字符串添加方法  要写到对应的包装对象的原型下才行
      var str= "hello world";
      //若我们想在原型上设置一个属性long 保存字符串的长度
      //var str = new String("hello world");// 1.找到基本包装对象,创建一个和字符串值相同的对象,
      //String.prototype.long=str.length; // 2.通过这个对象找到了包装对象下的方法并调用
      //str=null; //  3.这个刚创建的对象被销毁
      String.prototype.long=str.length;//  执行到这一句,同样因为没有length属性 后台会偷偷的执行上述三步操作
      console.log(str.long); //结果为:11
    复制代码

     
    注意:这样因为你是给基本类型string的原型上添加的属性,所以任意一个字符串都可以访问到这个属性及此值。(所以不提倡这种做法)

    var str= "hello world";
    var str2="哈哈 我的长度也为11吗?";
      String.prototype.long=str.length;
      console.log(str2.long);   //结果为:11 
  • 相关阅读:
    Windows上使用“LogView”打开大文件
    windows CMD命令查看局域网内所有主机名及IP
    解决Sqlserver 2008 R2在创建登录名出错"此版本的 Microsoft Windows 不支持 MUST_CHANGE 选项。 (Microsoft SQL Server,错误: 15195)"
    解决 ASP.NET 编辑错误"CS0006: 未能找到元数据文件C:WINDOWSassemblyGAC_32System.EnterpriseServices2.0.0.0__b03f5f7f11d50a3aSystem.EnterpriseServices.dll"
    ASP 未结束的字符串常量
    Godaddy ssl续费更新问题总结
    [转]How to query posts filtered by custom field values
    SqlServer 在查询结果中如何过滤掉重复数据
    [UE4]C++的const类成员函数
    [UE4]C++三种继承方式
  • 原文地址:https://www.cnblogs.com/1549983239yifeng/p/14081771.html
Copyright © 2011-2022 走看看