2010-07-13 43 views
1

我想構建一些對象來讓我的生活變得更簡單,但不知何故我無法讓它工作。我得到了以下代碼:JavaScript不執行對象方法

function Paragraph(className, innerHTML, parentId) { 
    this.className = className; 
    this.innerHTML = innerHTML; 
    this.parentId = parentId; 
} 

Paragraph.generateParagraph = function() { 
    console.debug(this.parentId); // Expect 'testDiv' 
    alert(this.parentId); // Expect 'testDiv' 
}; 

function initialize() { 
    var paragraph = new Paragraph('testClass', 'testTitle', 'testDiv'); 
    paragraph.generateParagraph; 
} 

window.onload = initialize; 

當我嘗試執行此代碼時,沒有任何反應。我期待console.debug和 generateParagraph方法中的警報被執行。

任何幫助,將不勝感激!

回答

3

將方法添加到構造函數的原型中,而不是構造函數本身。

function Paragraph(className, innerHTML, parentId) { 
    this.className = className; 
    this.innerHTML = innerHTML; 
    this.parentId = parentId; 
} 

Paragraph.prototype.generateParagraph = function() { 
    console.debug(this.parentId); // Expect 'testDiv' 
    alert(this.parentId); // Expect 'testDiv' 
}; 

function initialize() { 
    var paragraph = new Paragraph('testClass', 'testTitle', 'testDiv'); 
    paragraph.generateParagraph(); 
} 

window.onload = initialize; 
+0

-1,我看不出這與問題中發佈的代碼有什麼不同。無論如何,這不是正確的答案。 – 2010-07-13 09:04:07

+0

@Andy E,其實這個答案是完全正確的。 – James 2010-07-13 09:06:56

+0

你是完全正確的!感謝你的回答! – 2010-07-13 09:08:40

1

你是不是執行generateParagraph功能,如括號缺少...

paragraph.generateParagraph 

這得到函數作爲回調...
要叫它:

paragraph.generateParagraph(); 
+1

仍然無法正常工作,方法需要被添加到構造函數的原型,而不是構造函數。 – 2010-07-13 09:07:20

1

你'不會調用該函數。

paragraph.generateParagraph(); 
2

變化

Paragraph.generateParagraph = function() { 

Paragraph.prototype.generateParagraph = function() { 

添加的功能構造函數的屬性,而非原型。通過將函數添加到原型,它將成爲使用new關鍵字調用構造函數時創建的對象的一部分。

此外,還需要括號調用generateParagraph,否則你到了函數的引用,而不是調用函數:

paragraph.generateParagraph();