javascript对象,包装类

对象

  1. 对象字面量/对象直接量

    var obj = {} : plainObject

    var obj = {
        name:'wdq',
        eat:function(){
            console.log('I`m eating');
        }
    }
    obj.name; // 访问属性
    obj.eat();// 执行函数
    
  2. 构造函数

    1. 系统自带的构造函数 Object() Array() Number()

      var obj = new Object();
      
      obj.name = 'wdq';
      obj.eat= function(){
          console.log('I`m eating');
      }
      
    2. 自定义

    function Car(){

    }
    var c = new Car();
    c.name = 'wdq';
    c.run = function(){}

    
    > 和普通的函数没有区别,只是人为的习惯首字母大写(大驼峰式命名规则)
    
    2.1 **属性,函数的设置及初始化**
    
    ```js
    function Car(){
     this.name = 'wdq',
     this.health = 100; 
     this.run = function(){
         this.health --;
     }
    } 
    var car = new Car();
    car.run();
    car.health; // 99
    

使用this给Car设置属性及函数,并初始化化


​ 2.2 带参数的构造函数

// 属性,函数有用户决定
function Car(_name,_frun){
    // this = {};
    this.name = _name,
    this.health = 100; 
    this.run = _frun;
    // return this;
} 
var car = new Car('BWM',
                  function(){this.health --;}
                  );
car.run();
car.health; // 99

上述构造函数原理:会先在函数体前隐式的创建this对象,即 this = {} ,然后执行this.xxx ,最后再return this

包装类型

Boolean,String,Number

  • 自动装箱
var num = 123; // (1)
num.len = 2; // (2)自动包装 ,new Number(num).len =2 
num.len // (3)undefined

num 为原始值,只有对象才能设置属性

步骤(2)会进行自动包装 ,重新生成对象,执行 new Number(num).len=2,

步骤(3)也会自动包装,生成新的对象, num.len不存在, 所以num.lenundefind`;

步骤(2)和(3)生成的是两个不同的对象

  • 自动拆箱

    var num = new Number(123);
    num * 2 // 246
    

    num * 2 会将num 隐式的转换成原始值类型,再乘以2

你可能感兴趣的:(javascript对象,包装类)