Javascript 将一个函数指定为另一个函数';s属性

Javascript 将一个函数指定为另一个函数';s属性,javascript,function,properties,scope,Javascript,Function,Properties,Scope,为什么这样做有效: var myFunction = function() {} myFunction.printSomething = function() { console.log("This is something"); } myFunction.printSomething(); 而这不是吗?(“预期标识符”问题) 在第一个示例中,我是否真的成功创建了myFunction对象的新printSomething属性?考虑到函数应该是javascript中的对象,我希望两者都

为什么这样做有效:

var myFunction = function() {}

myFunction.printSomething = function() {
    console.log("This is something");
}

myFunction.printSomething();
而这不是吗?(“预期标识符”问题)


在第一个示例中,我是否真的成功创建了myFunction对象的新printSomething属性?考虑到函数应该是javascript中的对象,我希望两者都能起作用。我理解错了吗?

您需要从函数返回一个对象,并且可以按预期调用该对象

为了更好地理解,请检查我创建的以下代码片段

var myFunction=function(){
返回{
printSomething:function(){
log(“这是某种东西”);
}
};
}

myFunction().printSomething()如果您这样做,第二个示例将起作用:

var myFunction = function() {
    return {
        printSomething: function() {
            console.log("This is something");
        }
    }
}

myFunction().printSomething();

您使用的语法不起作用。你不能只让
printSomething:function(){}在一个函数的中间打开。您可以使用
var printSomething=function(){}
,或者您可以像我那样返回一个对象,其中
printSomething:function(){}
是该对象的一部分

,感谢Pointy在他的注释中为我指明了正确的方向

是的,函数确实是对象,它们可以像任何其他对象一样包含属性

但是,在第二个示例中,
{}
中的代码块是调用myFunction时执行的,而不是将其定义为对象

var myFunction = function() {
    // 'printSomething:' can't just be hanging like that!
    printSomething: function() {
        console.log("This is something");
    }
}

myFunction.printSomething();

第二个示例不起作用,因为这不是有意义的JavaScript语法。函数确实是对象,但函数头后面的
{}
是用于代码块的,而不是对象初始值设定项。它不是JSON对象。这只是一个物体。对不起,我弄错了。将更新答案。:-)谢谢你的指点。这很有见地。但是我想你的意思是
myFunction()。在那个函数调用中printSomething()
var myFunction = function() {
    // 'printSomething:' can't just be hanging like that!
    printSomething: function() {
        console.log("This is something");
    }
}

myFunction.printSomething();