自我如何在对象内部更新

How come self gets updated inside object?

本文关键字:内部 更新 对象 自我      更新时间:2023-09-26

我有一个对象,我创建了两个实例:

    var generalGraph = new graph(generalFunnel)
    generalGraph.draw("#conversion");
    var invoicingGraph = new graph(invoicingFunnel)
    invoicingGraph.draw("#invoicing")

这是对象(请注意,这经过高度简化以使其更易于理解)注释是控制台输出。

graph = function(funnel){
    this.funnel = funnel.conversions
    mySelf = this
    this.draw = function(selector){
        console.log(mySelf.funnel)
        //generalGraph ["Användare", "Påbörjat Onboarding", "Skapat oganisation", "Skapat användare", "Kom tillbaka", "Köpt"]
        //invoicingGraph ["Användare", "Påbörjat Onboarding", "Skapat oganisation", "Kom tillbaka", "Köpt"]
        nv.addGraph(function() {
            console.log(mySelf.funnel)
            //generalGraph ["Användare", "Påbörjat Onboarding", "Skapat oganisation", "Kom tillbaka", "Köpt"]
            //invoicingGraph ["Användare", "Påbörjat Onboarding", "Skapat oganisation", "Kom tillbaka", "Köpt"]
        });
    }
}

出于某种原因,当我做generalGraph.draw时,它使用invoicingFunnel的漏斗。为什么?我怎样才能阻止它发生?

mySelf是一个

全局变量,你缺少它前面的var。因此,您的两个graph实例都使用相同的 mySelf 值。

改变:

mySelf = this

var mySelf = this
  • 请参阅此问题,了解使用和省略变量之间的区别。

  • 您可以通过使用严格模式来防止将来出现这些错误,该模式将为您发现这些错误。

  • 在 JavaScript 中省略分号是可能的,但由于它涉及复杂的规则,因此被认为非常危险。今天这样做通常不受欢迎。
  • 同样 - JS中的构造函数名称通常以大写字母开头。您的构造函数可能也应该使用 var 关键字定义。