有什么基本的例子来帮助我理解函数是对象吗?

时间:2012-01-31 02:33:16

标签: javascript

我正在学习javascript,我一直听到的一件事是“函数是对象”。你能为我提供一些例子来更好地理解这个概念吗?

5 个答案:

答案 0 :(得分:5)

不确定。这是一些示例代码:

function Hello() {
    alert(Hello.world);
}

Hello.sayHello = Hello;
Hello.world = 'Hello, world!';

Hello.sayHello.sayHello.sayHello.sayHello.sayHello();

Here's proof that it works, too.

请注意如何为函数指定属性,并将其分配给自身并以递归方式引用它。这是一个对象,就像JavaScript中的大多数其他东西一样,你可以用它做任何事情。如果您之前看过原型继承:

Function.prototype.alert = function() {
    alert(this.apply(null, arguments));
};

function add(a, b) {
    return a + b;
}

add.alert(1, 2); // Alerts 3

这里有很多 - 函数文字,这本质上是一个没有名字的函数;原型继承;功能方法;动态论证;函数为this

答案 1 :(得分:1)

以下是jsBin的简短示例:http://jsbin.com/enicaj/edit#source

基本上,由于函数是对象,因此它们也可以具有属性和方法。

编辑:JavaScript内联。

function test(){
    return 'hello';
}
test.method = function(){
    return ' world';
};

document.write( test() + test.method() );

输出'hello world';

答案 2 :(得分:0)

是的,你可以写一个函数:

function MyFunction()
{

}

但你也可以写

var MyFunction = function()
{

}

你可以使用MyFunction();同时打电话。以各种方式编写它们有不同的原因,两者都有其好处。

示例1:即使您可以在定义之前使用该功能,也可以全局访问该功能。 示例2:该函数可以扩展。

var MyFunction = function()
{
    // private methods/properties for use inside object
    var privateProperty = 'privatevalue';
    var privateFunction = function()
    {
        return '';
    }

    // public methods/properties for use outside object
    this.propertyName = 'value';
    this.publicFunction = function()
    {
        return privateProperty;
    }
}

您可以像对象一样从函数中调用公共数据。

var myobject = new MyFunction()
myobject.publicFunction();
// returns privatevalue;

但您无法访问privateProperty var。

myobject.privateProperty // will returned undefined variable privateProperty

您可以在对象(函数)中定义属性甚至方法/函数。 这非常严重,但我希望它能帮助你理解它。

答案 3 :(得分:0)

var sayHi = function() {
  console.log("hi!");
};

var anotherFunction = function(functionObject) {
  functionObject();
};

函数“sayHi”作为参数作为参数传递给“anotherFunction”函数并被调用。

anotherFunction(sayHi);

使用Chrome中包含的javascript控制台来观察此jsFiddle example

答案 4 :(得分:0)

带参数的变量函数的最简单示例。

var x = function(message){
    alert(message);
};

x('hello world');
x('hello again');

JSFiddle