function abc(){
//multiple variables and functions
a:function(){alert("a")};
}
function test(){
var k=abc();
k.a();
}
在上面的例子中,我有一个巨大的函数abc()被赋值给一个变量。我想调用可见的成员函数,如变量中的a()。这是否可以实现,请给我一个示例代码。
答案 0 :(得分:7)
如果在函数后面加上括号,则可以将函数的结果赋值给变量。
如果要分配函数本身,只需省略括号:
var k = abc;
k.a();
修改强>
根据@Kuba Wyrostek的回答以及@Pointy的评论,a()
函数不会被正确曝光。
您需要查看Module Pattern。您需要做的是为变量分配一个函数,并让该函数返回您希望能够在该函数之外使用的函数。这有助于封装。
从评论中的代码中可以很难说出用户生成的代码究竟是什么,但我会尽我所能。
var abc = (function () {
var grabApi,
initialize;
// Just an example of how to assign an existing function
// to a property that will be exposed.
grabApi = SCORM2004_GrabAPI();
// This is an example of how to have a property that will be
// exposed be a custom function passing a parameter.
initialize = function(initString) {
return SCORM2004_GrabAPI().Initialize(initString);
};
return {
getApi: grabApi,
init: initialize
}
}());
然后,您可以在整个代码中使用此abc
对象。同样,这是试图举例说明如何根据你的评论做我认为你想做的事情。
// Assign the SCORM2004_GrabAPI function to a variable.
var SCORM2004_objAPI = abc.getApi();
// Call the Initialize function with an empty string.
abc.init("");
答案 1 :(得分:1)
嗯......与@ krillgar的答案相反,我相信你期待你的abc()
返回新物体。像这样:
function abc(){
var privateVar;
return {
//multiple variables and functions
a:function(){alert("a")}
}
}
function test(){
var k=abc();
k.a();
}
答案 2 :(得分:0)
你应该把它变成一个对象。通过这种方式,您可以访问其属性a
。
var abc ={
a:function(){alert("a")}
}
function test(){
var k=abc;//Ofcrse remove the parenthesis
k.a();
}
test();