2015-10-14 195 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」Contacts一樣直接創建一個新的Contact對象,但不能通過該函數創建。問題創建新對象

我試圖找到自己的答案,但沒有運氣。我現在不知道我應該在尋找什麼,所以我只是卡住了。

另外,當我說我「創建聯繫人對象的泰勒對象」時,我使用單詞「對象」錯誤嗎?

謝謝!

+1

你永遠不會創建一個'steve'變量像你一樣保持接觸與'泰勒'和'麥克' – doogle

+0

'var newName'是一個局部變量,而不是全局變量。 –

+0

只需返回'createContact'中創建的變量..請參閱此問題http://stackoverflow.com/questions/5887386/how-to-return-values-in-javascript ..'自定義對象'部分 – 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正嘗試用'createContact()'函數省略'var steve ='部分。 –

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