Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何重新定义myObject';s的主要功能,e。GmyObject()的功能是什么,而不会损坏myObject';s属性,e。GmyObject.foo?_Javascript - Fatal编程技术网

Javascript 如何重新定义myObject';s的主要功能,e。GmyObject()的功能是什么,而不会损坏myObject';s属性,e。GmyObject.foo?

Javascript 如何重新定义myObject';s的主要功能,e。GmyObject()的功能是什么,而不会损坏myObject';s属性,e。GmyObject.foo?,javascript,Javascript,我有一个很难解释的合法问题。请原谅我说话时的莫名其妙,并试着理解我的意思P 在JS中,对象可以具有属性。可以将函数指定给属性。您可以重新定义对象的属性,而无需更改其其他属性。 var myObject={}; myObject.myFunction=function(){return 1;}; myObject.bar=“bar”; myObject.myFunction=function(){返回“此处的另一个函数”;} console.log(myObject.bar);//这仍然是“酒吧

我有一个很难解释的合法问题。请原谅我说话时的莫名其妙,并试着理解我的意思P

在JS中,对象可以具有属性。可以将函数指定给属性。您可以重新定义对象的属性,而无需更改其其他属性。

var myObject={};
myObject.myFunction=function(){return 1;};
myObject.bar=“bar”;
myObject.myFunction=function(){返回“此处的另一个函数”;}
console.log(myObject.bar);//这仍然是“酒吧”
但对象本身可以是函数


问题1:这种函数对象的函数的正确术语是什么?我将在下面称之为“函数对象的主函数”

我知道在JS中所有函数都是函数对象,所以说“函数对象的函数”是不正确的。但是当一个对象“foo”可以执行两个函数时:
foo()
foo.bar()
,就应该有一种明确的方法来区分这两个函数

由于函数对象是对象,因此它们可以具有属性

问题2:如何重新定义函数对象的主函数,同时保持其他函数对象的属性不变

我想要的示例:

myFunctionObject=function(){return 1;}
myFunctionObject.bar=“bar”;
//我该怎么做。。。
myFunctionObject=function(){返回“此处的另一个函数”;}
//…这样它仍然返回“Bar”?
console.log(myFunctionObject.bar);
函数对象的主函数应该存储在。。。可能是一些隐藏的属性,例如。g<代码>myFunctionObject.\uuuu函数\uuuu=function(){return 1;}


PS我的目标是理解JS的内部结构。我不是指任何实际的用例,除了在[CodeWars]上解决一些疯狂的JS功夫练习(.

问题1不建议将用户定义的属性添加到函数中,因为您无法控制函数的属性,因此无法确定是否要对另一个属性进行阴影处理。由于不建议这样做,我认为没有正确的术语。就我个人而言,我将它们称为函数具有用户定义的属性

问题2:代码
myFunctionObject=function(){return“other function here”}
myFunctionObject
设置为不同的对象(
function(){return“other function here”;}
)。因此,您需要将旧对象的属性传递给新对象。一种方法是使用添加属性的函数,而不是使用赋值添加属性

function addBar(o){
    o.bar = "Bar";
    return o;
}

myFunctionObject = addBar(function () { return 1; });
myFunctionObject = addBar(function () { return "Another function here"; });
console.log(myFunctionObject.bar);
这样一个函数对象的函数的正确术语是什么?下面我称之为“函数对象的主函数”

它被称为“函数”。(函数)对象本身就是函数的属性被称为“方法”。如果你说的是构造函数上的方法,你也可以称它们为“静态方法”(属于“类”)

如何重新定义函数对象的主函数,同时保持其他函数对象的属性不变

不能。函数的调用行为在javascript中是不可变的


你所能做的就是创建一个新函数,覆盖存储旧函数的变量,并复制所有属性。

foo
是一个函数,
foo.bar
是一个函数。所有函数都是可调用的对象。你所要求的是不可能的。你不能按照你想要的方式来做,但你可以有效地将所有已定义的函数复制到新的主函数在不覆盖此对象的情况下,无法覆盖对象的主定义。唯一的方法是保存此对象的本地副本,将这些属性指定给此。丑陋,但功能正常。我明白了,谢谢。我将接受第一个提到不可能的答案le提供了一种定义新函数的变通方法,将属性从旧函数复制到新函数。我想区分“函数”一词的两种含义:1.对象,函数实例,它有一个与之不可变关联的过程。2.与函数实例关联的过程。我从未见过任何人使用过JS land中的“过程”。然后使用“函数对象”和“函数”。虽然它们之间存在不可更改的关联,但术语“函数”通常意味着两者。要将过程称为对象的一部分,可以使用“主体”或(编译)代码。我想区分“函数”一词的两种含义:1.一个对象,一个函数实例,它有一个与之不可变关联的过程。2.一个与函数实例关联的过程。我在JS land中从未见过有人使用“过程”。