2014-01-24 78 views
1

所以我想構建一個自定義的構造函數來使用,我對原型部分有點困惑。我正在測試它,當我去做一個console.log(testVar.getHostname);它作爲文本返回函數。關於Javascript構造函數和原型的困惑

所以我有以下幾點。

function nodeInfo(hostname) { 
    this.hostname = hostname; 
}; 

nodeInfo.prototype.getHostname = function() { 
    return this.hostname; 
}; 

var testVar = new nodeInfo("google.com"); 

console.log(testVar.getHostname); 

輸出如下。

function() { 
return this.hostname; 
} 

任何想法我在做什麼錯在這裏?原型方法可以在構造函數之外嗎?我在一大堆搜索谷歌的文章中看到了這種方式。 如http://www.phpied.com/3-ways-to-define-a-javascript-class/

任何幫助,非常感謝。

+0

這是正確的。 'testVar.getHostname'是一個函數。你有沒有試過調用它? 'console.log(testVar.getHostname());' –

回答

1

您想要console.log(testVar.getHostName())運行該功能。

JavaScript中的函數是一流的值。它們可以被變量引用,存儲在數組中,設置爲屬性等。在這種情況下,你要求它爲該函數打印一個字符串值,在這種情況下恰好是源代碼。你也可以這樣做:

console.log(typeof testVar.getHostName); 
// "function" 

就可以升級了自己的知識,審視和思考以下的輸出:

var testVar = new nodeInfo("google.com"); 
hostName = "Global"; 
var f1 = testVar.getHostName; 
var o = { f2: testVar.getHostName, hostName:"In Object" }; 

console.log(testVar.getHostName()); 
console.log(f1()); 
console.log(o.f2()); 
f1.call(o); 
o.f2.call(testVar); 
+0

謝謝!,我一直在javascript上工作​​,我無法相信我忽略了括號。 –

+0

@HuyNguyen非常歡迎。注意我的編輯更多的知識。 – Phrogz