无法访问__proto__上的Getter方法

时间:2017-11-10 16:35:32

标签: javascript prototype

我在Javascript中学习原型,并获得了很多关于他们的用法。但我对以下内容感到困惑,认为它没有起作用。

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

Employee.prototype.code = "SIMPLE";
Employee.prototype.getName = function()
{
    return this.name;
}

var a = new Employee("Manish");
var b = new Employee("Vikash");

a.__proto__.code // SIMPLE
a.__proto__.getName() // Undefined

__proto__返回true时,为什么我们无法访问a.__proto__ == Employee.prototype上的某个功能。

2 个答案:

答案 0 :(得分:2)

上下文(又名this)是在调用函数时在javascript中确定的。所以这里:

a.__proto__.getName()

上下文是 a .__ proto __ ,并且没有 name 属性,因此它返回undefined。这里:

a.getName()

你用上下文 a 调用getName,并且a有一个名字......

答案 1 :(得分:0)

可以访问__proto__对象上的功能,但是您会因为在通话时丢失对this的绑定而获得此行为这样这个功能就没有回归你所期望的。 this的值由调用上下文确定。出于试验目的,您可以尝试像这样添加绑定:

a.__proto__.getName.bind(a)()
// Manish
// or
a.__proto__.getName.call(b)
// Vikash