是一个全局范围的函数内部的javascript函数?

时间:2017-02-20 14:06:13

标签: javascript oop

这是我做过的测试的一个例子:

function f1(var1){
  alert('f1 called');
  function f2(var2){
    alert('f2 called');

  }
  this.data='something else';
  this.f2 = f2;
}
f1.data='something';
f1.f3 = function(var3){
    alert('f3 called');
}
console.log(f1); //shows the function
console.log(f1.data); //can have properties attached - cool
console.log(f1.f2(2)); //error: "f1.f2" is not a function
console.log(f1.f3(3)); //this works as expected

看来f1中的函数f2在范围内是本地的。有没有相同的方法来调用像这样的函数内的函数?

3 个答案:

答案 0 :(得分:7)

不幸的是,this绑定到window的全局范围,因为您尚未使用f1

实例化new f1();的实例
var f = new f1();
f.f2(); // Now works

答案 1 :(得分:0)

根据您要实现的目标,您可以使用几种模式来访问f2之外的f1功能。您可以使用f1实例化new对象:

function f1() {
  this.f2 = function () { console.log('f2'); }
}

new f1().f2() //logs 'f2'

或者您可以从函数f2返回函数f1

function f1() {
  return function f2() { console.log('f2'); }
}

f1()() //logs 'f2'

答案 2 :(得分:0)

将代码更改为:

function f1 (var1){
  alert('f1 called');           
};
f1.data='something else';
f1.f2 = function f2(var2){
  alert('f2 called');
};