对象创建

创建一个对象

var obj = {
    name: 'xx',
    age: 18
}
var obj = new Object();
obj.name = 'xx';
obj.age = 18;

创建同类型多个对象

创建多个人对象,创建多个动物对象。

自定义构造函数

function Person(){
    // 创建人对象用的
}

function Animal(){
    // 创建动物对象用的
}

var p1 = new Person()
var a1 = new Animal()

因为在游戏中,人和动物都是对象,为了更好的区分,其实可以设计不同的构造函数创建不同类型的对象。

可通过 instanceof 检测不同类型的对象,实现不同的效果。

new 关键词作用

  1. 在构造函数函数内部创建一个新的对象。
  2. 把新的对象的内存地址保存给了 this 。
  3. 构造函数执行完毕后,把 this 保存的地址返回到外部。

构造函数调用

// 自定义构造函数 - 创建人
function Person(name, age, sex) {
    this.name = name;
    this.age = age;
    this.sex = sex;
}

debugger;
var result1 = Person('小明', 18, '男');             // 普通函数调用,没有 new
var result2 = new Person('小明', 18, '男');         // 构造函数调用,有 new 关键词
两种情况 调用 是否创建新对象 返回值
Person() 当做普通函数调用 不会,this 指向 window undefined
new Person() 构造函数调用 会,this 指向新建的对象 返回 this 指向的那个新对象

PS :构造函数其实也是函数,只不过用的时候需要 new 关键词创建对象和返回对象而已。

1568271915197.png

1568272031916.png

三大关系 联想记忆 专业术语
Person 妈妈 构造函数
Person.prototype 老公 原型对象
new Person() 孩子 实例对象

new Person() 会有妈妈内部的属性 和 父亲上添加的方法。

// 自定义构造函数 - 创建人
function Person(name, age, sex) {
    this.name = name;
    this.age = age;
    this.sex = sex;
}

// Person.prototype 可以理解为 Person 构造函数的老公
Person.prototype.canSay = function () {
    console.log('我是DJ', this.name, ',你还会爱我吗?');
}

// new 的过程会创建一个新的对象,这个新对象可以理解为 构造函数 的孩子
var p1 = new Person('小明', 18, '男');

1568272596184.png

小结

  1. 构造函数内部用于添加属性
  2. 构造函数的 prototype 用于添加方法
  3. 通过 new 构造函数() 创建的对象,都会有构造函数的属性和 prototype 的方法。