为什么我们不能像在 javascript 中为对象字面量那样在函数体内向函数对象添加属性?
Why can't we add properties to a function object inside function body like we do for object literals in javascript?
看下面的代码
var foo = function(){
prop1 : "value";
}
foo.prop2 = "value";
console.log("prop1" in foo) // logs flase
console.log("prop2" in foo) // logs true
为什么我们不能像在对象字面量中那样向函数对象添加属性?为什么我必须在其主体之外为函数对象声明 属性 ?直接在其主体中向函数对象添加属性是否有不同的语法。
因为你用了分号。你用逗号来做。
正确的用法是:
var foo = {
prop1 : "value",
prop2 : "value"
}
那是因为 javascript 中的函数语法不允许这样做。你需要的只是一个普通的对象。
Is there a different syntax to add properties to a function object
directly in its body.
是的。有。它被称为构造函数。
function Foo(){
this.prop1 = "value";
}
var obj = new Foo();
console.log(obj.prop1);
您使用的是类似于 CoffeeScript 的东西吗?您忘记了对象上的 {}
。
首先我建议你return一个合适的对象:
var foo = function(){
{ prop1 : "value" };
}
还是不行。它将导致:
foo.prop2 = "value2";
{ [Function] prop2: 'value2' }
foo()
将 return
{ prop1: 'value' }
foo.prop2
将 return 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
属性,在这种情况下它没有多大意义。
看下面的代码
var foo = function(){
prop1 : "value";
}
foo.prop2 = "value";
console.log("prop1" in foo) // logs flase
console.log("prop2" in foo) // logs true
为什么我们不能像在对象字面量中那样向函数对象添加属性?为什么我必须在其主体之外为函数对象声明 属性 ?直接在其主体中向函数对象添加属性是否有不同的语法。
因为你用了分号。你用逗号来做。
正确的用法是:
var foo = {
prop1 : "value",
prop2 : "value"
}
那是因为 javascript 中的函数语法不允许这样做。你需要的只是一个普通的对象。
Is there a different syntax to add properties to a function object directly in its body.
是的。有。它被称为构造函数。
function Foo(){
this.prop1 = "value";
}
var obj = new Foo();
console.log(obj.prop1);
您使用的是类似于 CoffeeScript 的东西吗?您忘记了对象上的 {}
。
首先我建议你return一个合适的对象:
var foo = function(){
{ prop1 : "value" };
}
还是不行。它将导致:
foo.prop2 = "value2";
{ [Function] prop2: 'value2' }
foo()
将 return
{ prop1: 'value' }
foo.prop2
将 return 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
属性,在这种情况下它没有多大意义。