天天看点

创建对象的两种方式

使用对象字面量的方式创建对象

    var obj = {
      name: '刘德华',
      age: 18,
      sayHi: function () {
        console.log('hi');
      }
    };
    // 使用对象
    console.log(obj.name);
    console.log(obj['age']);  //注意,这里不能忘记掉引号。
    obj.sayHi();
    //属性采取的是属性名:属性值
    //多组属性和方法中间采用的是逗号隔开
    //方法后面跟的是函数。      

使用 new Object创建对象

    var object = new Object();
    object.name = '刘德华';
    object.age = 19;
    object.sex = '男';
    object.sayHi = function(){
      console.log('忘情水');
    }
    //创建一个空对象,追加属性数据的方式。  对象名.属性名 = 值
    //使用方式和上面都一样。
    console.log(object.age);      

自定义构造函数

    // function 构造函数名(参数1....){ 构造函数名的首字母要大写
    //this.属性名 = 属性值;
    //this.方法名 = function(){}
    // }
    // 调用构造函数   new 构造函数名()      
function Star(name,age,sex){
      this.name  = name;
      this.age = age;
      this.sex = sex;
      this.sing = function(){
        console.log('唱歌');
      }
    }
    var ldh = new Star('张学友',22,'女');  //构造函数要通过new来调用
    console.log(ldh.name);
    console.log(ldh.age);
    console.log(ldh.sex);      

new 关键字执行的过程

  1. new 构造函数可以产生一个新的空对象
  2. this 就指向我们创建的这个空对象
  3. 执行构造函数里面的代码(完成赋值操作)
  4. 返回这个对象。

this的指向问题

  1. this在函数中的指的是 window 。因为window调用了这个函数。
  2. this在对象中的指向是当前这个对象。
  3. this在构造函数中的指向当前的这个调用者。

继续阅读