函数在JS对象

时间:2015-05-15 12:09:00

标签: javascript scope

我创建了对象var myObj = new functon () {...}。 在该对象中,我添加了如下函数:

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

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

5 个答案:

答案 0 :(得分:1)

你应该像这样打电话给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();

答案 1 :(得分:1)

将脚本更改为

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

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

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

答案 2 :(得分:1)

未定义,因为您没有本地变量func2。所以正确的引用应该是this.func2()

但即使在这种情况下,您的代码也不是理想的构造对象(混合构造函数和匿名函数)(尽管正确)。在这种情况下,最好先使用对象文字,而不是创建构造函数来创建一个单独的对象实例:

var myObj = {

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

    func2: function () {}
};

答案 3 :(得分:1)

除了他人提供的解决方案之外。如果你打算调用一个像这样定义的javascript函数

var func = function(){}

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

另一种定义函数的方法并不重要。

function func(){}

所以整体代码应该是

var myObj = function(){

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

}

答案 4 :(得分:0)

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

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