【问题标题】:How do methods defined on constructor prototypes have access to instance members in the constructor in Javascript?构造函数原型上定义的方法如何访问 Javascript 构造函数中的实例成员?
【发布时间】:2020-07-11 13:31:19
【问题描述】:

我正在学习 Javascript 中的原型和原型链,但我对以下问题感到困惑。假设我在下面有构造函数:

function Circle() {
    this.radius = 1;
}

let c1 = new Circle();

Circle.prototype.toString = function() {
    console.log('The radius is: ' + this.radius);
}

c1.toString(); // "The radius is: 1"

在上面的例子中,c1Circle 都为它们的原型引用了内存中的同一个对象。 toString 函数是在原型上定义的,而不是在构造函数中。所以,当我在c1 上调用toString 时,javascript 引擎应该首先查看c1,然后查看包含toString 函数的原型对象。它正在“向上”查找原型链。

我的问题是,为什么this.radius 有效?原型上定义的 toString 函数如何知道构造函数中定义的实例成员?这就像“向下”查看原型链,从原型对象到实际的实例对象。

【问题讨论】:

    标签: javascript


    【解决方案1】:

    您的问题的答案很简单。 this 将始终引用它的调用者对象。

    在这种情况下,toString 方法是在 c1 实例上调用的,因此在 toString 内部,this 将引用 c1,它会在其中找到 radius 属性。

    【讨论】:

    • 太棒了,我完全忘记了,谢谢。到时会接受答案。
    猜你喜欢
    • 2012-08-21
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-28
    • 2019-07-16
    相关资源
    最近更新 更多