实例化原理,包装类

72 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第31天,点击查看活动详情

this的指向问题

//当前的函数还不是实例化,this指向的就是window
    function Car() {
        this.color = 'red';//window.color = 'red'
    }
    Car();
function Car() {
        this.color = 'red'
    }
    var car = new Car();
    //当实例化了,this的指向将发生改变,指向当前实例化的对象
    //当访问 car.color 的时候就是访问 car 对象里面的color

new的原理

    function Car(color, brand) {
        var me = {};
        me.color = color;
        me.brand = brand;

        return me;

    }
    var car = Car('red', 'Mazda');
    console.log(car.color); //red
    console.log(car.brand); //Mazda
  function test() {
    var obj = {
        name: '蓝轨迹',
        color: 'blue'
    }
    return obj;
  }
  var obj1 = test();
  //我们打印也能打印出来,和this也是一样
  console.log(obj1.name);//蓝轨迹

new的时候,实际上是系统把this指向window的转到实例化对象上

return 问题

  function Car() {
    this.color = 'red';
    this.brand = 'Benz';

    //系统不认这个123,返回的还是 return this
    return 123;
  }
  var car = new Car();
  console.log(car.color); //red
//return {}
  function Car() {
    this.color = 'red';
    this.brand = 'Benz';

    return {};
  }
  var car = new Car();
  
  console.log(car.color); //undefined
  console.log(car); //{}
  function Car() {
    this.color = 'red';
    this.brand = 'Benz';

    return [];
  }
  var car = new Car();
  
  console.log(car); //[]
 function Car() {
    this.color = 'red';
    this.brand = 'Benz';

    return function test() {};
  }
  var car = new Car();
  
  console.log(car); //f test(){}
  • 引用值 { } [ ] function

  • 原始值 number string undefined

  • 当实例化对象的时候,原本返回的是this,要是 原始值,系统会不认你,但是引用值的话,还是会和你返回出去的

包装类

  //包装类
  //原始值没有自己的方法和属性
  var a = 1; //原始值
  console.log(a);

  var b = new Number(a);
  console.log(b);//你会看到他是个对象

image.png

//new Number()是一个内置方法
 b.len = 1;
 b.add = function() {
        console.log('今天礼拜四')
    }
  console.log(b); 

new Number()之后就实例化了一个对象,就可以任意设置属性和方

image.png

var b = new Number(a);

    var d = b + 1;
    console.log(d); 2
    //一个对象加上数字类型也能参与预算,最后返回原始值