关于javascript:js2创建对象的方式

32次阅读

共计 1147 个字符,预计需要花费 3 分钟才能阅读完成。

批量创建对象的几种形式

如果当初咱们心愿创立一系列的对象,,比方 person 对象

工厂模式

// 工厂模式
// 只须要通过该函数就能够发明出大量对象
function createPerson(name,age,address,sno){var p = {}
    p.name = name
    p.age = age
    p.address = address
    p.sno = sno
    p.eating = function(){console.log(this.name+` 正在游玩 `);
    }
    p.running = function(){console.log(this.name+`zhengzai`);
    }
    return p
}
var p1 = createPerson("张三",19,"北京市","110")
var p2 = createPerson("张四",29,"北京市","110")
// 工厂模式的毛病:获取不到对象最实在的类型
// 1. 当咱们打印应用工厂函数创立进去的对象时,会发现,对象类型时 Object,并不是 Person 类型
// 也就是说应用工厂函数创立进去的对象并没有一个比拟具体类型,只能看出时 object 类型

构造函数

构造函数也称为结构器 (constructor), 通常是咱们创建对象时会调用的函数
在其余编程语言中, 构造函数时存在于类中的一个办法, 称之为构造方法
然而 js 中的构造函数不太一样

意识构造函数
构造函数也是一个一般的函数
一旦通过 new 关键字去调用一个函数, 那么这个函数就是一个构造函数了
通过 new 关键字创建对象时, 会执行以下操作
1. 在内存中创立一个新的对象(空对象)
2. 这个对象外部的[[prototype]] 属性会被赋值为该构造函数的 prototype 属性
3. 构造函数外部的 this 会指向创立吹来的新的对象
4. 执行函数的外部代码(函数体代码)
5. 如果构造函数没有返回非空对象,则返回创立进去的新对象

function person(name, age, height, address) {
  // 将传递进来的属性增加到对象上
  this.name = name;
  this.age = age;
  this.height = height;
  this.address = address;

  this.running = function(){console.log(this.name+'在跑步');
  }

}
var per1 = new person('张三三',18,1.65,'北京市')
// 这里打印的 per1 的类型就是 person 了
// 这里就能够拿到具体的对象类型
console.log(per1);

// 标准:构造函数的首字母最好是大写

构造函数也不是最好解决批量创建对象的办法
毛病:当构造函数中含有函数时,每当咱们创立一个对象,就会从新开拓一个存储该函数的空间,当创立多个对象时就会造成无意义的节约

正文完
 0