Skip to content
js
// 对象的声明和实例创建

// 1. 使用构造器创建对象实例
// 语法:new  Constructor[(arguments)]
// 构造器可以是普通函数也可以是js内置的或者宿主程序扩展的构造器
// 按照惯例,构造器函数名首字母应该大写

// 可以被对象方法引用的外部函数
function getValue() {
  return this.value
}

// 构造器函数
function MyObject() {
  this.name = 'Object1'
  this.value = 123
  this.getName = function () {
    return this.name
  }

  this.getValue = getValue
}

// 使用new运算符,实现实例创建
const aObject = new MyObject()
// 没有参数也可以写作obj = new MyObject

/** ************************************* */
// 将构造器作为普通函数来使用
// 示例:将foo()视为普通函数
function foo() {
  const data = this // 这里暂存了this,这是一个技巧(保存私有数据)
  return {}
}
var obj = new foo()
// obj也会被赋值为一个对象,但它并不是由new运算产生的对象实例
// 而是foo函数中返回的对象字面量
// 使用这种方法,只能返回引用类型的值,不能返回值类型
// 如果返回值类型,会被忽略,依然使用原来的this引用,如下

function foo(a) {
  this.value = a
  return 'aaa'
}

var obj = new foo('bbb')
js
// 字面量声明对象
// 示例:一些已声明过的变量或标识符
function getValue() {
  // ......
}

// 对象字面量声明
const aObject = {
  name: 'Object Literal',
  value: 123,
  getName() {
    return this.name
  },
  getValue,
  get name2() { // 使用存储器的属性
    return `name: ${this.name}`
  }
}