为什么可以';我们在函数体中向函数对象添加属性,就像在javascript中为对象文本添加属性一样吗?

为什么可以';我们在函数体中向函数对象添加属性,就像在javascript中为对象文本添加属性一样吗?,javascript,javascript-objects,Javascript,Javascript Objects,请看下面的代码 var foo=function(){ 建议1:“价值”; } foo.prop2=“值”; console.log(foo中的“prop1)//logs flase log(foo中的“prop2”)//logs true,因为您使用了分号。你可以用逗号 正确的用法是: var foo = { prop1 : "value", prop2 : "value" } var newFoo = foo() { prop1: 'value' } newFoo.pro

请看下面的代码

var foo=function(){
建议1:“价值”;
}
foo.prop2=“值”;
console.log(foo中的“prop1)//logs flase

log(foo中的“prop2”)//logs true
,因为您使用了分号。你可以用逗号

正确的用法是:

var foo = {
    prop1 : "value",
    prop2 : "value"
}
var newFoo = foo()
{ prop1: 'value' }
newFoo.prop2 = "value2";
{ prop1: 'value', prop2: 'value2' }

这是因为javascript中函数的语法不允许这样做。你需要的只是一个普通的物体

是否有不同的语法向函数对象添加属性 直接在它的身体里

对。有。它被称为构造函数

function Foo(){
    this.prop1 = "value";
}
var obj = new Foo();
console.log(obj.prop1);

你在用类似于咖啡脚本的东西吗?您忘记了对象上的
{}

首先,我建议您返回一个适当的对象:

var foo = function(){
    { prop1 : "value" };
}
还是不行。这将导致:

foo.prop2 = "value2";
{ [Function] prop2: 'value2' }
foo()
将返回

{ prop1: 'value' }
foo.prop2
将返回
value2

它不起作用的原因是您正在添加到实例中。不是函数体(您不能更改代码,只能更改对象)

更好的解决办法是:

var foo = {
    prop1 : "value",
    prop2 : "value"
}
var newFoo = foo()
{ prop1: 'value' }
newFoo.prop2 = "value2";
{ prop1: 'value', prop2: 'value2' }
正如我们所看到的,你可以修改函数,但是你不能修改它的返回语句,因为这需要软件重写函数,而我们不是天网。。。然而D

另一种修改内容的有趣方式是原型制作:

Function.prototype.prop2 = "value2"
foo()
{ prop1: 'value' }
foo.prop2
'value2'

但是,将
函数.prototype
视为会使每个函数都获得
.prop2
属性,在这种情况下没有多大意义。

这将要求至少调用一次
foo
?真正地它会导致
意外的标记:
我理解速度的需要:但是在发布任何内容之前,您应该有一个切实可行的版本。忽略语法错误,您永远不会调用/实例化foo()来定义
prop1