2012-07-17 86 views
1

我有什么是我相信一个非常基本的JavaScript问题,因为我挣扎的一些愚蠢的原因。了解javascript对象

如果您可视化下面的对象。我如何从'init'函数内调用一个函数?

TC.design = { 

     init : function(){ 
      //How would I run the loadPage function here? 
     }, 
     loadPage : function(){ 

     } 
} 

我试过this.loadPage();我期望能够工作,但它返回未定义。

我显然不是在这里掌握一些基本的东西,希望有人能解释。

编辑:现在这是解决...

由于约瑟夫·西尔伯火箭我已经意识到我的错误...

的问题又出现了,由于的一个误区javascript .call()函数。我打电话initTC.design.init.call(),我现在明白是不正确的。我的歉意....

+2

你是如何调用'init'?当你这样做时,你可能会改变'this'的价值。 – 2012-07-17 22:17:13

+1

'this.loadPage()'应该工作:http://jsfiddle.net/85AWT/ – 2012-07-17 22:17:29

+1

当然'this.loadPage()'工作。由于您返回了“undefined”(这可能意味着您没有在'loadPage'中使用'return'关键字,就像您向我们展示的代码中那样),您会得到'undefined'。注意你'undefined'实际上就是你**得到的**。这意味着'loadPage'被触发。否则,您的代码会引发异常。 – freakish 2012-07-17 22:19:54

回答

0

在您的init函数中,this指的是TG.design对象; this.loadPage()应该可以工作,但您必须正确调用init函数才能调用它。

下面是一些示例代码:

var TC = { 
    design: { 
     init: function() { 
      this.loadPage(); 
     }, 
     loadPage: function() { 
      conosle.log('Works'); 
     } 
    } 
}; 

TC.design.init();​ 

和这里的小提琴:http://jsfiddle.net/85AWT/

2

不是这项工作?

TC.design = { 
     init : function(){ 
      TC.design.loadPage(); 
     }, 
     loadPage : function(){ 
      alert('Booga') 
     } 
} 
+2

'this.loadPage'似乎实际上工作得很好:http://jsfiddle.net/85AWT/ – 2012-07-17 22:18:59

+0

是的上述工作正常......但我试图了解为什么this.loadPage不会工作....我现在找到了原因。我把init作为TC.design.init.call();卫生署! – gordyr 2012-07-17 22:21:50

2

this.loadPage应该可以正常工作,除非你改变的this值。

例如:

setTimeout(function(){ 
    TC.design.init(); 
}, 1000); 

这将正常工作。当调用init时,thisTC.design

setTimeout(TC.design.init, 1000); 

这是行不通的。现在,thiswindow里面的init。因此,this.loadPage将无法​​正常工作。

所以,要小心你打电话给TC.design.init

+0

在这种情况下,代码会引发一个异常(试图调用undefined'this.loadPage'),但OP声明它返回'undefined'。 – freakish 2012-07-17 22:23:20

+0

@freakish:对。无论如何,我会在这里留下。就像一个供参考。 – 2012-07-17 22:24:20