2012-01-31 54 views
2

嗨内着电话,我定义这个脚本:JavaScript构造:FUNC

var asdf = {     
     settings : {    
      scope : "blah" 
     }, 
     func1 : function() { 
       alert('1'); 
     }, 
     func2 : function() { 
       this.func1(); 
     } 
} 

为什么不能我用this.func1()调用一个成员函数?它的奇怪,因为this.settings.scope完美的作品。

什么是正确的语法? tnx

+0

这是您的实际测试代码?或者你有没有机会创建这个例子而不进行测试,看看它是否证明了你遇到的实际问题? – 2012-01-31 15:14:47

+0

只是一个例子 – zsitro 2012-01-31 15:21:05

+0

但是您是否测试了一下,看它是否能说明您的问题?我们看不到你如何调用'func2',但是如果你正在执行'asdf.func2()',那么你的代码就可以工作。 – 2012-01-31 15:23:38

回答

2

“为什么不能使用this.func1()来调用一个成员func?”

可以,只要你从asdf上下文称为func2

asdf.func2(); // alerts '1' 

如果你做了这样的事情...

var fn = asdf.func2; 

fn(); 

然后,它是行不通的,除非你手动设置的背景下...

var fn = asdf.func2; 

fn.call(asdf); // set the calling context of "func2" to the "asdf" object 
+0

好吧,但为什么我需要在调用func1而不是在这个“asdf”上下文。 settings.scope变量? – zsitro 2012-01-31 15:23:15

+0

@zsitro:你的问题并没有显示你如何使用'this.settings.scope',所以我不能回答这个问题。我只是说,如果你使用'asdf.func2',那么'func2'中'this'的值就是'asdf'对象。你的问题没有显示任何问题。如果有问题需要解决,您需要在问题中展示它。 – 2012-01-31 15:30:41

0

我从你的标签中获取func2是一个构造函数?原因是this将是使用new调用函数时构造的对象。例如:

function Constructor() { 
    console.log(this); 
} 

Constructor(); // window 
new Constructor(); // instance of Constructor printed out 

相反,只需接入func1asdf.func1代替。无论如何,如果你在这种情况下不是使用this会更安全; this可以绑定任何东西:

function func() { 
    alert('What am I? ' + this); 
} 

func.call('A String! Weird.'); // Alerts What am I? A String! Weird.