我正在学习javascript,我一直听到的一件事是“函数是对象”。你能为我提供一些例子来更好地理解这个概念吗?
答案 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');