JavaScript包装类

对象

对对象的属性增删改查:

增:mrDeng.wife = “xiaoliu” 直接写。.属性 = “”
删:delete mrDeng.name 就直接把名字删了
改:mrDeng.wife = “xiaoliu” ,换双引号里面的属性
查:console.lgo(mrDeng.属性);

对象的创建方法:

1.var obj = { } planObject 对象字面量/对象直接量
2.构造函数
1)系统自带的构造函数 new Object()
2)自定义
3.大驼峰式运算规则
TheFirstName

构造函数内部原理

–有new发生的隐式三步变换
1.在函数体最前面隐式的加上this ={}
2.执行this.XXX = XXX
3.隐式的返回this

构造函数的实例不仅可以使用本身的属性,也可以使用prototype的属性,而prototype中有一个属性就是constructor,他指向构造函数的原型,在原型中记录,这个原型是哪个构造函数的。

   
   
  • 1
  • 2

示例:

<script type = "text/javascript"> 
function Student(name,age,sex){
    //var this = {
    //   name : ""
    //   age : ""
    //  };
      this.name = name;
      this.age = age;
      this.grade = 2017;
    //return this;
}
var student = new Student('zhang',18,'male');

</script>
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

包装类

基本包装类型(原始值):

  • Number
  • String
  • Boolean

特性:原始值没有属性和方法,不能给原始值赋属性值

示例:

<script type = "text/javascript"> 
    var num = 4;
    num.len = 3;  
    console.log(num.len);  
</script>
//undefined

   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

解析:

<script type = "text/javascript"> 

    //包装类    
    var num = 4;

    num.len = 3;  //首先看到此句给原始值赋值,是违法语法规则的,所以使用包装类来解决

    //new Number(4).len = 3;  delete  

    //系统自动生成一个newNumber(4)(现在不为原始值所以可以赋值)再为其赋属性值len,操作完以上步骤随即销毁。

    //new Number(4).len;    此处的new与上面不是一个,上面已经销毁了,这里就没有len属性了
    console.log(num.len);  //访问到此处,系统发现我们又在访问无效值(仍然是给原始值赋值的遗留连锁问题),于是又进行一步更正(写在此句之上)

</script>

//undefined

   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

示例:

<script type = "text/javascript"> 
    var str = "abcd";
    str.length = 2;
    console.log(str);
</script>
   
   
  • 1
  • 2
  • 3
  • 4
  • 5

解析:

<script type = "text/javascript"> 
    var str = "abcd";
    str.length = 2;     //给原始值赋值,所以使用包装类
    //new String('abcd').length = 2; delete

    //new String('abcd').length;    //new String是有length属性的,它的length属性值=4
    console.log(str.length);        //注意:这与前面不同,“.length”是系统自带的属性,而前面的len不是属性

</script>
//4
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

示例 :

<script type = "text/javascript"> 
    var str = "abc";
    str += 1;
    var test = typeof(str);
    if(test.length == 6) {
        test.sign = "typeof的返回结果可能为string";
   }
    console.log(test.sign);
</script>
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

解析:

<script type = "text/javascript"> 
    var str = "abc";
    str += 1;
    var test = typeof(str);  //test = "string"
    if(test.length == 6) {
        test.sign = "typeof的返回结果可能为string";   //因为前面有test = "string",所以现在是string类型
        //new String(test).sign = 'xxx';     
   }
   //new String(test).sign 
    console.log(test.sign);
</script>

//undefined
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

例题 :

<script type = "text/javascript"> 
    var x = 1;
    if(function f(){}) {
        x += typeof f;
   }
    console.log(x);
</script>
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

解析 :

<script type = "text/javascript"> 
    var x = 1;
    if(function f(){}) {    // 注意:function外面加了括号,所以变成了表达式,
                            //      所以就可以立即执行了,在执行后就再也找不到它了
        x += typeof f;      //  这时的f是找不到的(f is not defined),
                            //一般这时系统会报错,但是唯独typeof,会返回字符串“undefined”
   }
    console.log(x);
</script>
//  1undefined
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

例题:

<script type = "text/javascript"> 
    function Person(name,age,sex) {   
        var a = 0;
        this.name = name;
        this.age = age;
        this.sex = sex;
        function sss () {
            a++;
            console.log(a);
        }
        this.say = sss;
    }
    var oPerson = new Person();
    oPerson.say();
    oPerson.say();
    var oPerson1 = new Person();
    oPerson1.say();
</script>
//1 2 1
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

例题:
求x、y、z的值。

<script type = "text/javascript"> 
    var x = 1, y = z = 0;
    function add(n)return n = n + 1;
    }
    y = add(x);
    function add(n) {
        return n = n + 3;
    }
    z = add(x);
</script>
//1 4 4
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

解析:

<script type = "text/javascript"> 
    var x = 1, y = z = 0;
    y = add(x);
    function add(n) {
        return n = n + 3;
    }
    z = add(x);
</script>
//1 4 4
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

函数相同,后面函数覆盖前面的函数。

习题:
计算字符串的长度,字母数字为一个,汉字为两个。
解法一:

<script type = "text/javascript"> 
    var count = str.length;
    for(var i = 0; i < str.length; i++){
        if(str.charCodeAt(i) > 255){
            count ++;
        }
    }
</script>

   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

解法二:

<script type = "text/javascript"> 
    var code = 0;
    for(var i = 0 ; i<str.length; i++){
        if(str.charCodeAt(i) > 255) {
            count +=2;
        }else{
            count ++;
          }
    }
</script>

   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
        <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/markdown_views-ea0013b516.css">
            </div>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值