javascript - 自推对象构造器

标签 javascript oop

所以JavaScript是一种函数式语言,类是由函数定义的,函数作用域对应于类的构造函数。经过相当长的时间研究如何在 JavaScript 中进行 OOP,我现在明白了。

我想做的事情不一定可行,所以我首先想知道这是否是个好主意。假设我有一个数组和一个如下所示的类:

var Entry = function(name, numbers, address) {
  this.name = name;
  if(typeof numbers == "string") {
    this.numbers = [];
    this.numbers.push(numbers);
  }
  else this.numbers = numbers;
  this.address = address;
};

var AddressBook = [];

然后我使用以下功能添加联系人:

function addContact(name, numbers, address) {
  AddressBook.push(new Entry(name, numbers, address));
}

我不能让new Entry()自身 放入AddressBook 中吗?如果我不能在创建时执行此操作,那么也可以使用 Entry 原型(prototype)中的方法来执行此操作会很有趣。我想不出一种方法来做类似的事情。

最佳答案

您可以尝试将 AddressBook 数组引用传递给函数,如下所示:

var Entry = function(name, numbers, address, addressBook) {
  this.name = name;
  if(!(numbers instanceof Array)) {
    this.numbers = [numbers];
  }
  else this.numbers = numbers;
  this.address = address;
  addressBook.push(this);
};

var addressBook = [];

function addContact(name, numbers, address) {
  new Entry(name, numbers, address, addressBook)
}

关于javascript - 自推对象构造器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20169612/

相关文章:

php - 模型对象应该在 Controller 类中实例化吗?

Java SWT 为对话框扩展另一个类

javascript - jquery 子菜单 : li items still toggling

javascript - 测试对象是否是 Google Closure 类框架中接口(interface)的实现

javascript - Uncaught ReferenceError : stLight is not defined (in Chrome only)

python - 如果我到处都在处理字典,我应该把它们设为 "classes"吗?

c# - C# 中的 override 和 new 关键字有什么区别?

javascript - 使用 JavaScript 在单击按钮时加载不同的 CSS 文件

javascript - Heroku 和 Rails 4 : Heroku isn't finding my nested folder under assets/javascripts

oop - 'low in coupling and high in cohesion'是什么意思