2015-10-14 3 views
0
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 в ее нынешнем виде не позволяет этого сделать. Я могу создать новый контактный объект прямо так, как я сделал с контактами «tyler» и «mike», но не через функцию.Проблема Создание нового объекта

Я попытался найти ответ самостоятельно, но не повезло. Я действительно не знаю, что я должен искать на данный момент, поэтому я просто застрял.

Кроме того, я использую слово «объект» неправильно, когда говорю, что «создал объект-тилер объекта Contact»?

Спасибо!

+1

Вы никогда не создать 'steve' переменную для хранения контактов, как вы делаете с 'tyler' и' mike' – doogle

+0

'var newName' - локальная переменная, а не глобальная. –

+0

Просто верните переменную, созданную в 'createContact' .. PLS см. Этот вопрос http://stackoverflow.com/questions/5887386/how-to-return-values-in-javascript .. раздел' Custom Object' – Amitd

ответ

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 глобальный:

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"); 

Но вы сказали, что вы знали, как это сделать, так что ...

+0

Я все еще получая поддержку JavaScript.Есть ли лучший способ сделать то, что я пытаюсь сделать? –

+0

@TylerHines Почему вы хотите назвать ваши переменные в качестве параметра в функции? Лучше всего было бы просто не делать этого. –

+1

@TylerHines: 'var steve = new Contact (" steve "," 555-555-5555 ");' было бы нормальным способом сделать это. Я бы назвал это «лучше», но это мнение ... –

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

+0

Я думаю OP пытается опустить часть 'var steve =' с функцией 'createContact()'. –

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

Смежные вопросы