2015-05-28 85 views
0
function abc(){ 
    //multiple variables and functions 
    a:function(){alert("a")}; 
} 
function test(){ 
    var k=abc(); 
    k.a(); 
} 

在上述情况下,我有一个巨大的函数abc()被分配给一个变量。我想调用可见的成员函数,如变量中的()。这是可能实现的,请给我一个示例代码,如果是这样的话。在JavaScript中为变量分配函数

+0

等等......什么是“a:function()”部分?这似乎没有编译,除非它是我没有听说过的一些ES6的东西。 – Katana314

+0

@ Katana314它看起来像OP已经截断了代码的相关位(例如大部分_Object Literal_) –

+0

当你调用'abc'时,它是什么'return'? –

回答

1

嗯...违背@ krillgar的答案,我相信你期待你的abc()返回新对象。类似这样的:

function abc(){ 
    var privateVar; 
    return { 
    //multiple variables and functions 
    a:function(){alert("a")} 
    } 
} 
function test(){ 
    var k=abc(); 
    k.a(); 
} 
+0

好的。感谢您的支持! – krillgar

7

如果在函数后包含括号,则将函数的结果分配给变量。

如果你要分配的功能本身,只是省略括号:

var k = abc; 
k.a(); 

编辑

每@Kuba Wyrostek的答案,@尖尖的评论,即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(""); 
+3

这是真的,但应该注意的是,函数“abc”中本地声明的称为“a”的函数将不作为函数对象的属性在“abc”外部可用。 – Pointy

+0

SCORM2004_objAPI = SCORM2004_GrabAPI(); strResult = SCORM2004_objAPI.Initialize(“”);这是一个软件生成的代码。在这里,我需要编写SCORM2004_GrabAPI()并以这种方式返回对象,以便用户可以访问SCORM2004_objAPI.Initialize(“”);.我不明白我能如何实现它。 – Whoophee

+0

谢谢你的收获,@Pointy。我没有想到通过这一切。我会更新并向库巴的回答点头。 – krillgar

0

你应该让它成为一个对象。通过这种方式,您可以访问其属性a

var abc ={ 
    a:function(){alert("a")} 
} 
function test(){ 
    var k=abc;//Ofcrse remove the parenthesis 
    k.a(); 
} 
test(); 
相关问题