查看下面的代码
var foo = function(){
prop1 : "value";
}
foo.prop2 = "value";
console.log("prop1" in foo) // logs flase
console.log("prop2" in foo) // logs true
为什么我们不能像在对象文字中那样向函数对象添加属性?为什么我要在其体外声明函数对象的属性?是否有不同的语法直接在函数体中添加属性。
答案 0 :(得分:3)
那是因为javascript中的函数语法不允许它。你需要的只是一个普通的对象。
是否有不同的语法来向函数对象添加属性 直接在它的身体里。
是。有。它被称为构造函数。
function Foo(){
this.prop1 = "value";
}
var obj = new Foo();
console.log(obj.prop1);
答案 1 :(得分:0)
你使用类似于CoffeeScript的东西吗?你忘记了对象上的{}
。
首先我建议你回复一个合适的对象:
var foo = function(){
{ prop1 : "value" };
}
仍然无效。这将导致:
foo.prop2 = "value2";
{ [Function] prop2: 'value2' }
foo()
将返回
{ prop1: 'value' }
foo.prop2
将返回value2
它不起作用的原因是因为您要添加到实例。不是函数体(你不能改变代码,只能改变对象。)。
更好的解决方案是:
var newFoo = foo()
{ prop1: 'value' }
newFoo.prop2 = "value2";
{ prop1: 'value', prop2: 'value2' }
正如我们所见,你可以修改它的功能,但是你不能修改它的return语句,因为它需要软件重写函数而我们还不是天网......但是。 ; d
修改内容的另一个有趣方法是原型设计:
Function.prototype.prop2 = "value2"
foo()
{ prop1: 'value' }
foo.prop2
'value2'
但是看到Function.prototype
会使每个函数获得.prop2
属性,在这种情况下它没有多大意义。
答案 2 :(得分:-3)
因为你使用过半结肠。你用逗号来做。
正确使用将是:
var foo = {
prop1 : "value",
prop2 : "value"
}