JS 对象创建方法

对象的创建方法

  1. 字面量创建对象

    let obj = {
        name:'winnie',
        color:'pink',
        say(){
            console.log('sayHi')
        }
    }
    console.log(obj.name); // winnie
    obj.say(); //sayHi
    
  2. 调用系统 构造函数 创建对象

    let obj = new Object();
          obj.name = "winnie";
          obj.say = function () {
            console.log("我是系统 构造函数创建的 对象 中的 方法 哦");
          };
          console.log(obj.name); //winnie
          obj.say();//我是系统 构造函数创建的 对象 中的 方法 哦
    
    法1、2(缺点)创建对象效率很低,创建多个对象时会产生大量重复的代码

3.工厂模式创建对象

function createPerson (name, age) {
  return {
    name: name,
    age: age,
    sayName: function () {
      console.log(this.name)
    }
  }
}
//生成实例对象
let per1 = createPerson('winnie',18) 
console.log(per1.name) // => winnie

法3:(优点)解决了重复实例化多个对象的问题

​ (缺点)得出的对象虽然有 不同的键值对,可 其创建的对象名全为Object ,不能辨识产生的对象

4、自定义构造函数创建对象

function Person (name, age) {
  this.name = name
  this.age = age
  this.sayName = function () {
    console.log(this.name)
  }
}

var p1 = new Person('Jack', 18)
p1.sayName() // => Jack

var p2 = new Person('Lily', 17)
p2.sayName() // => Lily

而要创建 Person 实例,则必须使用 new 操作符。
以这种方式调用构造函数会经历以下 4 个步骤:

  1. 创建一个新对象
  2. 将构造函数的作用域赋给新对象(因此 this 就指向了这个新对象)
  3. 执行构造函数中的代码
  4. 返回新对象

构造函数需要配合new操作符使用才有意义,构造函数首字母一般为大写

法4:(优点)创建对象方便

​ (缺点)同一个方法在创建不同的对象时,都会产生新的存放地址,造成浪费内存

如图示意:

请添加图片描述

法4:内存浪费解决方法(提取同一个 say 方法)
    // 提前将say方法声明好
    function say() {
      console.log(this.name);
    }
    function createStudent(name, age) {
      this.name = name;
      this.age = age;
      this.say = say
    }

    const obj = new createStudent('jack', 18);
    const obj1 = new createStudent("Lily", 17);

    console.log(obj.say === obj1.say); // true 
但是以上方法会造成 污染全局变量 的问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值