我需要创建一个电话簿。感谢表格,我可以检索一个人的数据。我需要为此目的使用对象。我在一个方法的帮助下创建了一个phoneBook()对象,该方法可以在phoneBook中添加一个人
我决定(虽然没有要求)将“人”概念划分为2,这导致了一个“人”对象和一个“AddressPerson”对象(同一个人可以有两个房子:“我的裁缝很丰富! “:-))
这是声明Person对象的好方法吗?
我们可以创建一个没有地址的Person对象,然后像我对“Person2”对象一样添加它吗?
如果有人可以帮助我,我会非常感激。非常感谢你提前!“
function phoneBook(){
this.Liste = new Array();
}
phoneBook.prototype.Add = function(){
Liste.push(new Person(aLastName,aFirstName,aAddress));
}
function Person(aLastName,aFirstName,aAdd){
this.LastName = aLastName;
this.FirstName = aFirstName;
this.Address =
new AddressPerson(aAdd.Street,aAdd.CP,aAdd.Town,aAdd.NumTel,aAdd.Email);
}
function Person2(aLastName,aFirstName){
this.LastName = aLastName;
this.FirstName = aFirstName;
this.Address = 'unknow';
}
function AddressPerson(aStreet,aCP,aTown,aNumTel,aEmail){
this.Street = aStreet;
this.CP = aCP;
this.Town = aTown;
this.NumTel = aNumTel;
this.Email= aEmail;
}
答案 0 :(得分:4)
一些建议:
PhoneBook
)更改为大写,并将您的方法/属性(lastName
,add()
)更改为小写this
永远不会被隐式使用。add()
应为add(person)
,其中person
是预先构建的Person
对象。Person2
?这似乎是多余的。Person
的构造函数中,您复制Address
的每个字段。一般只做this.address = address
就行了。但是,如果您想确保每个Person
都有自己的Address
实例,请在clone()
上提供Address
方法。答案 1 :(得分:1)
看看JSLint。这项工作有点像W3C的Markup Validator。
JSLint由Douglas Crockford创建 - 雅虎! JavaScript传播者和发明JSON的家伙。
JSLint的全部内容:
“JSLint是一个JavaScript程序 在JavaScript中查找问题 程序
当C是一个年轻的节目 语言,有几个常见的 编程错误没有 被原始编译器捕获,所以 一个名为lint的配件程序 开发出来的扫描源 文件,寻找问题。
随着语言的成熟, 语言的定义是 加强了消除一些 不安全感,编译器变得更好 发出警告。皮棉不再 需要的。
JavaScript是一个年轻的年龄段 语言。它原本打算 在网页,任务中完成小任务 Java太沉重了 笨拙。但JavaScript是非常的 能干的语言,它现在正在 用于大型项目。很多人 旨在制作的功能 易于使用的语言 对于大型项目来说很麻烦。一个 需要lint for JavaScript:JSLint, 一个JavaScript语法检查器和 验证
JSLint采用JavaScript源代码 扫描它。如果发现问题,那就是 返回描述该消息的消息 问题和大致的位置 在源头内。问题不是 但是,必然是语法错误 它经常是。 JSLint看一些 风格约定以及 结构性问题。它没有证明 你的程序是正确的。它只是 提供另一组眼睛来帮助 现场问题。
JSLint定义了一个专业子集 JavaScript,一种更严格的语言 比第3版定义的那样 ECMAScript语言规范。该 子集与推荐相关 在代码约定中找到 JavaScript编程语言。
JavaScript是一种草率的语言,但是 里面有一个优雅,更好 语言。 JSLint可以帮助您编程 用那种更好的语言来避免 大部分污水。“
答案 2 :(得分:0)
您可以为更简洁的代码做一些事情,并遵循今天公认的最佳做法。
您可以更改此行
this.Liste = new Array();
到
this.Liste = []; // shorthand for creating an array. You can do the same with an object with {}
我通常使用JSON对象来做这类事情。 Douglas Crockford's JavaScript is a very useful resource.
答案 3 :(得分:0)
非常感谢
我改变了我的代码:
function PhoneBook(){<br>
this.liste = [];<br>
}
PhoneBook.prototype.add = function(person){<br>
this.liste.push(person);<br>
}
function Person(lastName,firstName,address){<br>
this.lastName = lastName;<br>
this.firstName = firstName;<br>
this.address = address;<br>
}
function AddressPerson(street,cp,town,numTel,email){<br>
this.street = street;<br<
this.cp = cp;<br>
this.town = town;<br>
this.numTel = numTel;<br>
this.email = email;<br>
}
// tests for the others :-))
var phone = new PhoneBook();
alert(phone.liste.length);
var person = new Person(
"aaaaaa",
"bbbbbbb",
new AddressPerson("zzzzz","87","rrrrr","22222","eeeee@uk.co")
);
alert(person.address.street);
phone.add(person);
alert(phone.liste.length);
alert(phone.liste[0].address.numTel);
但我不知道怎么做,Levik在答案中说:
但是如果你想确保每个人都有自己的地址实例,请在地址上提供 clone()方法
答案 4 :(得分:0)
这是我的建议:
function PhoneBook( person /*, ... */ ){
this._liste = [];
}
PhoneBook.prototype.add = function(){
var l = arguments.length;
while(l--){
this._liste.unshift( arguments[l] );
}
}
function Person( p ){
this.lastName = p.lastName;
this.firstName = p.firstName;
this.address = p.address === 'unknown' ? new Address( p.address ) : 'unknown';
}
function Address( a ){
this.street = a.street;
this.CP = a.CP;
this.town = a.town;
this.numTel = a.numTel;
this.email = a.email;
}
答案 5 :(得分:0)
数据模型建议:
将AddressPerson
重命名为Address
。您可以假设地传递与Address
不对应的Person
个对象。
考虑将email
字段移至Person
- 正如您所提到的,您可能在一个地址有多个人(他们可能不一定共享电子邮件地址)。
将完全初始化的Address
传递给Person
构造函数。
删除Person2
功能,并使address
成为Person
的可选属性。例如。作业变为this.address = (address === undefined) ? "unknown" : address;
从风格/会议的角度来看,levik的反应很好 - 我赞同这些建议。
答案 6 :(得分:0)
在我注册之前评论我自己的帖子评论:
@harto-我认为不会改变 Person和Address构造函数 接受一个对象是一种改进。 这只是建造那些 对象不必要地复杂的IMO。 另外,我认为你的添加功能会 错过参数的第0个元素 阵列
我认为改变构造函数是好的,它允许自动克隆一个,如果你使用它,允许直接从JSON创建对象。无论如何,很多应用程序。如果需要,您可以随时进行参数长度验证并分析正确的行为。
对于add函数,它不会错过第0个元素,因为它是后递减的,这意味着表达式返回递减之前的值。这是你可以在javascript中设计的最快的循环。