对Javascript构造函数和Prototype感到困惑

时间:2014-01-24 21:53:52

标签: javascript

所以我正在尝试构建一个要使用的自定义构造函数,我对原型部分有点困惑。我正在测试它,当我去做一个console.log(testVar.getHostname);它将函数作为文本返回。

所以我有以下内容。

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/

非常感谢任何帮助。

1 个答案:

答案 0 :(得分: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 );