Javascript 对象没有方法?

Javascript 对象没有方法?,javascript,Javascript,我花了大约一个小时来寻找这个问题,但似乎找不到适合我的解决方案。我在一个对象中有一个函数(Function2),该对象由一个区间调用。Function2找不到Function1,并表示该方法不存在。为什么会这样,或者我的语法有什么问题 var ClassA = function () { this.attribute = ""; this.function1 = function() { alert("Function 1"); };

我花了大约一个小时来寻找这个问题,但似乎找不到适合我的解决方案。我在一个对象中有一个函数(Function2),该对象由一个区间调用。Function2找不到Function1,并表示该方法不存在。为什么会这样,或者我的语法有什么问题

var ClassA = function ()
{
    this.attribute = "";

    this.function1 = function()
    {
        alert("Function 1");
    };

    this.function2 = function()
    {
        alert("Function 2");
        this.function1(); <----- Does not exist?
    };

    this.function3 = function()
    {
        setInterval(this.function2, 5000);
    };
};

var CLASS_A = new ClassA();
CLASS_A.function3();
var ClassA=函数()
{
this.attribute=“”;
this.function1=函数()
{
警报(“功能1”);
};
this.function2=函数()
{
警报(“功能2”);

this.function1();您必须仔细查看此
在JavaScript中的含义以及在什么上下文中调用您的函数。您可以通过使用
函数
绑定
方法确保上下文是您想要的,如下所示:

var ClassA=函数()
{
this.attribute=“”;
this.function1=函数()
{
警报(“功能1”);
};
this.function2=函数()
{
警报(“功能2”);
this.function1();//存在,但仅在ClassA上,而不在窗口上
};
this.function3=函数()
{
setInterval(this.function2.bind(this),5000);
};
};
var CLASS_A=新的CLASS A();

CLASS_A.function3();
setInterval的行为是异步的。当您将this.function2作为参数提供给setInterval时,您基本上提供了一个回调方法。当setInterval达到5000时,它调用您的回调方法

“this”关键字根据上下文的不同而变化。回调上下文与对象的“ClassA”上下文非常不同。它与“this”不同

诀窍在于做到这一点:

var ClassA = function(){

   var that = this;

   //And then everywhere else use that instead of this.
   that.function1 = function() { ... 

   that.function2 = function() { ...
        that.function1

   that.function3 = function ....

}

祝你好运。

这个
在JS中是后期绑定的。捕获它的值以在函数中使用。换句话说:将
var that=this;
放在ClassA的顶部,并将所有
这个
替换为
那个
。这是一个已知的JS模式…在类的顶部使用
var self=this;
,然后引用内部函数s使用
self.functionName
一旦进入function2,“this”指的是function2作用域,而不是类作用域。这个问题在这里已经被问了十几次了。请参阅、等等。