函数在 JS 对象中未定义

Function is undefined in JS object

我创建对象 var myObj = new functon () {...}。 在那个对象中我添加了像这样的函数:

var myObj = new function () {
   this.func1 = function() {
       func2();
   }
   this.func2 = function() {
       ...
   }
}

如您在 func1 中所见,我尝试调用 func2 但它始终未定义。为什么?因为一切都在一个对象中。

你应该这样调用func2

var myObj = new function () {
   this.func1 = function () {
       this.func2();
   }
   this.func2 = function () {
     console.log('func2');
   }
}

myObj.func1();

如果你想调用 func2this. 和没有,你可以这样做

var myObj = new function () {
    function func2() {
        console.log('func2');
    } 
    
   this.func1 = function() {
       this.func2();
       func2();
   }
   
   this.func2 = func2;
}

myObj.func1();

将您的脚本更改为

var myObj = function () {
   var self = this;

   this.func1 = function () {
       self.func2();
   };

   this.func2 = function () {
       ...
   };
};

它是未定义的,因为你没有局部变量func2。所以正确的引用应该是this.func2()

然而,即使在这种情况下,您的代码也不是像这样的理想构造对象(混合构造函数和匿名函数)(尽管正确) .在这种情况下,最好首先使用对象字面量,而不是创建构造函数来仅创建一个对象实例:

var myObj = {

    func1: function () {
        this.func2();
    },

    func2: function () {}
};

在其他人提供的解决方案之上。如果您要调用这样定义的 javascript 函数

var func = function(){}

函数定义需要在函数调用之前。

在定义函数的另一种方式中,这无关紧要。

function func(){}

所以整体代码应该是

var myObj = function(){

   this.func2 = function(){
       ...
   }
   this.func1 = function(){
       func2();
   }

}

你可以这样打电话。 直接调用func2(),查找window对象的函数。

var myObj = functon(){
   var current = this;
   this.func1 = function(){
       current.func2();
   }
   this.func2 = function(){
       ...
   }
};