对象原型方法与值

时间:2012-12-23 16:29:13

标签: javascript

我对我的代码发生了什么感到有点困惑,这是我到目前为止所做的:

function Person(name) {
    this.name = name;
}

Person.prototype.getName = this.name;
Person.prototype.displayName = function() {
    return this.name;
}


var Sethen = new Person("Sethen");

console.log(Sethen.getName);
console.log(Sethen.displayName());

我很好奇为什么getName没有给我this.name值并且只记录空白,而displayName方法给了我正确的值。 getName是我的原型对象的属性,所以我的思维过程就是我可以像这样抓住它。

为什么getName没有记录Sethen的值?我如何像常规财产一样抓住这些信息?我必须使用方法吗?

2 个答案:

答案 0 :(得分:5)

因为this的值不是您认为运行该代码时的值。 this可能等于全局对象(即window)。

由于您正在调用displayName并通过在其前面添加Person对象的实例来设置上下文,因此在函数内部正确设置了this并获得了该人的姓名进行。

当然,您可以随时直接访问name媒体资源(Sethen.name)。

答案 1 :(得分:2)

问题是getName不是函数,而是在构造Person.prototype.getName对象之前首次分配Person时分配了值的属性。因此,它无法包含任何特定Person对象的值。

您在创建原型时根本无法访问对象的实例数据,因为还没有Person对象,因此还没有实例数据,因此this没有指向一个Person对象。

相反,Person.prototype.getName = this.name;正在为prototype对象分配值this.name,在您的代码中window.name或严格模式会导致错误,因为{{1}将是未定义的。

可以为原型分配函数或代码初始化期间已存在的任何数据。分配给原型的东西对于您创建的该类型的所有对象具有相同的值。这就是为它们分配函数/方法最有用的原因。

您可以通过这种方式实现它以获取给定Person对象的值:

this

另一种选择是直接访问function Person(name) { this.name = name; } Person.prototype.getName() = function() { return this.name; } var Sethen = new Person("Sethen"); console.log(Sethen.getName()); 属性:

.name