2016-10-19 72 views
0

我有功能A,它定义了另一个函数B。 B作为argument传递给另一功能Chandle event供以后使用。功能B need datafunction A。是否有可能以这种方式传递数据?从外部函数传递数据在内部函数中供以后使用

function A(B){ 

    var o = [1,2,3]; 


    B = function() { 
     alert(this.blio); // data from A blio is undefined 
    }; 

    B.blio = o; //bind data in property to B 

    $('selector').C({ result: B}); //handle event 
} 
+0

当您尝试时,是什么行为? –

+0

在函数B中,this.blio是未定义的。 – TheChampp

+0

调用“B()”的代码是什么? –

回答

0

通过以这种方式分配B作为函数,您声明它实质上是一个新类的构造函数。 B.blio不是该对象的属性,而是该类的静态属性,因此无法使用this进行引用。

相反,您应该在B类的原型上创建一个函数,该函数将访问实例化对象上的存储值。例如见以下:

var o = [1,2,3]; 

var B = function() { 
    console.log("constructor called"); 
}; 

B.prototype.func = function() { 
    console.log(this.blio); 
} 

function A(){ 
    var b = new B();//instantiate new object 
    b.blio = o;//assign property to object 
    b.func();//call prototype function 
} 
0

您覆盖参数B过去了分配

B = function() { 
    alert(this.blio); // data from A 
}; 

,然后试图通过分配属性(如一个对象)再次重写参数B起作用的,以功能

B.blio = o; 

你应该试试这个:

function A(B){ 

    var o = [1,2,3]; 

    B.myfunc=function() 
    { 
     alert(this.blio); 
    }; 
    B.blio = o; //bind data in property to B 

$('selector').C({ result: B.myfunc()}); //handle event 

}

0

让我们来谈谈这里涉及到的范围的一些事情。

function alpha(beta) { 
    this.foo = 42; 
    console.log('From inside alpha:', this.foo); 

    var beta = function() { 
     console.log('Form inside beta:', this.foo); 
    }; 

    beta(); 
} 

alpha(); 

当你执行功能的α,实际上是全球窗口对象。

如果您在控制台中运行下面的代码,你会看到阿尔法功能刚刚添加的FOO属性窗口并将其设置为42

console.log(window.foo); 

在阅读您的评论代码您正在处理一个事件,并且可以从您用作数据存储库的某个东西获取所需的当前值,此处的关键是确保您可以访问所需值的范围。

发布更具体的代码也会对hel有帮助你会得到更好的答案。所有嵌套函数的作用尚不清楚。