自推式对象构造函数
Self-pushing object constructor
所以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
吗?如果我不能在create上做到这一点,那么在Entry
原型中使用一个方法也会很有趣。我想不出类似的办法。
您可以尝试将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)
}
重新考虑设计方法。"Entry"对象的主要角色是信息持有者。您应该将AddToAddressBook功能封装在某种控制器或事件处理程序中。
详细信息你有不止一个责任,通常把这两个问题紧密结合在一起不是一个好主意。(例如,设计原则涉及单一责任原则和关注点分离。)
信息持有者–旨在了解某些信息并将该信息提供给其他对象的对象。
结构化器–一个维护对象之间关系以及有关这些关系的信息的对象。
我建议阅读SOLID原则,并尽量将每个对象的责任集中在狭窄的范围内。您的代码将不那么复杂,更易于维护和扩展。
退房-http://aspiringcraftsman.com/series/solid-javascript/
这里有一个产品和购物车的例子,非常接近您上面的场景。
相关文章:
- javascript中对象构造函数中的var属性与this.properties
- 文本表示法VS.构造函数,用于在JavaScript中创建对象
- 如何使用此从对象访问构造函数
- 如何使用构造函数's的输出,以便将值插入到对象中
- 带有内置图像对象的Canvas组件构造函数;t显示's图像
- 未能运行构造函数:TypeError:对象#<对象>没有方法'addPlugin'
- JavaScript模块模式-如何在使用对象/函数之前激发构造函数/init函数
- jQuery双对象构造函数-例如$($(this))
- Javascript - 如何向对象构造函数添加属性
- 尝试将变量传递到对象中时的作用域问题'的方法构造函数
- 为什么实例构造函数指向最上面的函数构造函数对象
- 构造函数对象
- 如何使用exports或module.exports将函数构造函数对象方法与原型封装在单个模块中
- 如何添加构造函数对象与用户输入
- 如何将构造函数对象的值设置为其他值的函数
- 将构造函数对象传入自调用函数
- 构造函数对象名称- javascript
- Hook构造函数对象
- 为什么我的 HTML 构造函数对象返回 [object Object] 而不是 [HTMLElementElement]
- 从我的构造函数对象创建一个youtube iframe视频,这样我就可以创建多个视频