Javascript 有没有一些基本的例子可以帮助我理解函数是对象?

Javascript 有没有一些基本的例子可以帮助我理解函数是对象?,javascript,Javascript,我正在学习javascript,我一直听到的一件事是“函数就是对象”。你能提供一些例子让我更好地理解这个概念吗?这里有一个关于jsBin的快速例子: 基本上,由于函数是对象,它们也可以具有属性和方法 编辑:JavaScript内联 function test(){ return 'hello'; } test.method = function(){ return ' world'; }; document.write( test() + test.method() ); 输

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

这里有一个关于jsBin的快速例子:

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

编辑:JavaScript内联

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

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

输出‘你好世界’

是的,您可以编写一个函数:

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
您可以在对象(函数)中定义属性甚至方法/函数。 这是一个非常粗糙的碰撞,但我希望它能帮助你更多地理解它

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

var anotherFunction = function(functionObject) {
  functionObject();
};
函数“sayHi”作为对象作为参数传递到“anotherFunction”函数并被调用

anotherFunction(sayHi);

使用Chrome中包含的javascript控制台来观察这一点。

带有参数的var函数的最简单示例

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

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

当然可以。下面是一些示例代码:

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

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

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

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

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

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

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

这里有很多-一个函数文本,本质上是一个没有名字的函数;原型遗传;功能方法;动态参数;作为
this

的函数,您可以将JavaScript移到您的答案中吗?如果jsbin下降,答案就没有多大用处了。在您的示例中,
this
不是指
MyFunction
,它指的是全局对象(
window
)。您可能需要区分公共变量在哪里。另外,还包括一个私有函数示例。@rampion我忘记了实例化对象。我很快写了这篇文章,感谢您在修改后的示例中提供的提示,
new
MyFunction
不是一个函数。我建议您阅读@andrewHitaker上的MDN指南。感谢andrew,您能为我推荐一个类似的指南来学习jquery吗?jquery自己的网站上有一个链接。这就是我讨厌Javascript的原因。谢谢-我打算把它作为我的展品A.;-)@彼得曼奇尼:嗯。。。为什么?我看这里没有问题。@PeteMancini-哪一部分?很多(如果不是全部的话)OO语言都可以让你做一个类似于
sayHello.sayHello.sayHello
的例子。第二个例子一开始可能有点混乱,因为有两个不同的
alert()
函数,但我仍然没有看到一个问题,如果你使用其他语言,这个问题会以某种方式消失…@minitech和nnnnnn(只能通知一个)这不是问题,这是清楚的。其他语言处理这个问题的可读性要高得多。当Javascript问世时,我开始使用它编程,它是一种非常简单但有用的脚本语言。这种迟钝的语法看起来和阅读起来都很糟糕。我的评论仅仅是指美学,我认为它是语言的一个重要组成部分。从1993年到几年前,我经常使用的Perl更糟糕。这并不是说它不是一种非常有用的语言。