JS中的对象

2019-03-14  本文已影响0人  GoFzy

一、调用系统构造函数与字面量方式

  我们可以直接通过 new Object() 创建:

var person = new Object(); //实例化对象
person.name = 'Jack';//添加属性
person.age = 18

person.sayName = function () { //添加方法
  console.log(this.name)
}

  每次创建通过 new Object() 比较麻烦,所以可以通过它的简写形式对象字面量来创建:

var person = {
  name: 'Jack',
  age: 18,
  sayName: function () {
    console.log(this.name)
  }
}

二、工厂模式创建对象

  上面两种写法本身没有问题,但是假如我们要生成两个 甚至多个person 实例对象呢?每次都重复定义会显得代码冗余,重复性太高。这里有一个简单的改进方法:工厂模式

function createPerson (name, age) {
  return {
    name: name,
    age: age,
    sayName: function () {
      console.log(this.name)
    }
  }
}

  然后直接调用生成实例对象:

var p1 = createPerson('Jack', 18);
var p2 = createPerson('Mike', 18);

  工厂模式虽然能解决一次性多次创建对象的问题,但每次创建的对象都是系统自定义对象Object,即console.log(实例对象 instanceof Object)返回true,这样在实际应用过程中无法分辨对象具体属于哪个类型。

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

  为了解决工厂模式存在的问题,这里引入了自定义构造函数

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

四、对象在内存中的存储

4.1 js中简单数据类型的存储--值传递

  js中的简单数据类型如string,number,boolean都是存于栈中


简单数据类型

4.2 js中复杂数据类型的存储--引用(地址)传递

  js中的复杂数据类型如Object(包括Function,Array等),它们的内容都是存于堆,而栈中存的是堆的地址,因此也叫地址传递:

复杂数据类型
  tips:
  ①内存中的栈:自动分配内存空间,系统会自动释放,用于存放基本类型数据的值和引用类型数据的地址
  ②内存中的堆:动态分配内存空间,大小不定,不会自动释放,用于存放引用类型数据的值
上一篇 下一篇

猜你喜欢

热点阅读