var Contact = function(name, number) {
this.name = name;
this.number = number;
}
Contact.prototype.greet = function() {
document.getElementById("output").innerHTML = this.name + " " + this.number;
};
function createContact(newName, newNumber) {
var newName = new Contact(newName, newNumber);
}
var tyler = new Contact("Tyler", "555-555-5555");
var mike = new Contact("mike", "555-555-5555");
createContact("steve", "555-555-5555");
alert(steve.name);
$("#addButton").click(function() {
steve.greet();
});
我遇到上述代码的问题。我遇到的问题是createContact函数。我想要完成的是编写一个最终将基于用户输入的函数,该函数创建一个具有名称和数字的新联系人。我还希望新的Contact对象的名称是newName的名称,因此var newName = new Contact。现在使用createContact函数不能实现这一点。我可以直接创建一个新的Contact对象,就像我使用“tyler”和“mike”Contacts一样,但不能通过函数创建。
我试图自己找到答案,但没有运气。我现在还不知道我应该在寻找什么,所以我只是卡住了。
另外,当我说“创建了Contact对象的tyler对象”时,我是否使用了“object”这个词?
谢谢!
答案 0 :(得分:1)
这将是一个非常不寻常的功能。但是,你可以通过拥有一个所有这些都存在的对象(如果你真的想要它可以是全局对象,但我不推荐它)来做到这一点,那么:
function createContact(newName, newNumber) {
theObject[newName] = new Contact(newName, newNumber);
}
例如:
var contacts = {};
function createContact(newName, newNumber) {
contacts[newName] = new Contact(newName, newNumber);
}
createContact("steve", "555-555-5555");
alert(contacts.steve.name);
或者通过window
global:
function createContact(newName, newNumber) {
window[newName] = new Contact(newName, newNumber);
}
createContact("steve", "555-555-5555");
alert(steve.name);
但是,我再次劝阻你不要使用全局变量。全局命名空间已经非常拥挤。
当然,这也是一个非常不寻常的功能。通常的做法是自己动手:
var steve = createContact("steve", "555-555-5555");
甚至
var steve = new Contact("steve", "555-555-5555");
但是你说你知道怎么做,所以......
答案 1 :(得分:0)
如何从createContact
方法中返回实例。
var Contact = function(name, number) {
this.name = name;
this.number = number;
}
Contact.prototype.greet = function() {
document.getElementById("output").innerHTML = this.name + " " + this.number;
};
function createContact(newName, newNumber) {
return new Contact(newName, newNumber); // I return the instance here
}
var tyler = new Contact("Tyler", "555-555-5555");
var mike = new Contact("mike", "555-555-5555");
var steve = createContact("steve", "555-555-5555");
alert(steve.name);

答案 2 :(得分:0)
一种解决方案是进行此修改:
function createContact(newName, newNumber, context) {
var ctx = context || this;
ctx[newName] = new Contact(newName, newNumber);
return ctx[newName];
}
var Contact = function(name, number) {
this.name = name;
this.number = number;
}
function createContact(newName, newNumber, context) {
var ctx = context || this;
ctx[newName] = new Contact(newName, newNumber);
return ctx[newName];
}
createContact("Tyler" , "555-555-5555");
createContact("mike" , "555-555-5555");
createContact("steve" , "555-555-5555");
alert( Tyler.name + ' | ' + mike.name + ' | ' + steve.name );