问题创建新对象

时间:2015-10-14 16:36:24

标签: javascript object

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”这个词?

谢谢!

3 个答案:

答案 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 );