JAVASCRIPT:如何从外部访问这些javascript成员函数?

时间:2011-06-11 02:16:05

标签: javascript javascript-events

我知道如何在这样写的时候访问下面的成员函数:

var blady_blah=
{
    some_member_function: function ()
    {
    }

}

我从外面访问blady_blah.some_member_function()

但是如何在这样写的时候访问成员函数:

(function() {

    some_member_function: function ()
    {
    }

})();

5 个答案:

答案 0 :(得分:2)

大括号{}用于定义对象文字和函数体。区别在于:

var name = {};    // Object literal

你也可以看作是

var name = {

};

这是一样的,但两者之间有一些空间,所以它仍然是一个对象文字,不幸的是它看起来非常相似:

var name = function () {    // Function body

};

一个对象可以有成员:

var name = {
  member: "string"
};

而功能不能;一个函数有声明:

var name = function () {
  do_something();
  var result = do_something_else();
};

你不能写

var name = function () {
  member: "string"
};

因为你把{}的两种用法混合在了一起。

变量可以在函数中定义,但不能在函数外部看到 - 它在函数范围内:

var name = function () {
  var something_useful = string;
};

答案 1 :(得分:2)

第二个例子是一个闭包(它恰好在里面有一个语法错误)。减去错误的语法,您的自我评估匿名函数如下所示:

(function() {
})();

如果您愿意,可以在其中定义对外界不可见的功能。如果您对维护干净的全局命名空间感兴趣,例如使用库代码,这将非常有用。

(function() {
  function utilityFunctionFoo() {
  }

  function utilityFunctionBar() {
  }
})();

当然,如果您想从外界打电话给任何这些功能,那你就不走运了。或者是你?实际上,还有另一种定义函数的方法:

var foo = function() {
}

这跟写作完全一样:

function foo() {
}

...除了用第二种风格编写时,你实际上可以省略var关键字并创建一个全局变量!将所有这些结合在一起:

(function() {
  publicData = "stuff accessible from outside anonymous function";
  var privateData = "stuff that stays inside anonymous function";

  function utilityFunctionFoo() {
  }

  function utilityFunctionBar() {
  }


  usefulFunctionExport = function() {
    utilityFunctionFoo();
    utilityFunctionBar();
  }
})();

usefulFunctionExport();

答案 2 :(得分:1)

在函数终止后,您无法访问它。当它的父函数结束时,它是一个超出范围的局部变量。

您应该使main函数成为构造函数,以便它返回一个类的新实例(您可以将其命名为Blahdy_blah),并将成员函数作为其属性之一。

查找构造函数,返回值以及访问成员变量。

答案 3 :(得分:1)

如果要执行该功能,则需要返回公开该功能的对象。

var LIB = (function() {

    var fn = {
        member_function : function(){}
    };

    return fn;


})();

并致电

LIB.member_function();

答案 4 :(得分:0)

(function() {

    blady_blah.some_member_function();

})();

如果您需要在其中添加内容,您可以这样写。

(function() {

    blady_blah.some_member_function(function(){

        // Do stuff...

    });

})();