Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.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 获取函数对象的属性_Javascript - Fatal编程技术网

Javascript 获取函数对象的属性

Javascript 获取函数对象的属性,javascript,Javascript,我正在学习面向对象的javascript,来自 根据教程,函数本身被视为一个对象,我知道可以使用javascript中的关键字获取对象的属性 var obj = {a:"hello",b=123}; for(var prop in obj) alert(var); 上述代码为我提供了功能对象obj中的键 但是当我在这种情况下使用相同的代码时 var funObj = function(a,b){ alert("hello"); } for(var prop in funObj) aler

我正在学习面向对象的javascript,来自

根据教程,函数本身被视为一个对象,我知道可以使用javascript中的关键字获取对象的属性

var obj = {a:"hello",b=123};
for(var prop in obj)
alert(var);
上述代码为我提供了功能对象obj中的键

但是当我在这种情况下使用相同的代码时

var funObj = function(a,b){
   alert("hello");
}
for(var prop in funObj)
alert(prop);
甚至在这种情况下

function myFunction(a,b){
 alert("hello");
}
for(var prop in myFunction)
alert(prop);
它没有给我任何输出,理想情况下,根据教程,函数对象应该包含三个属性,即:名称、长度和原型,但我没有得到任何输出,这是我做错了

请帮帮我

我做错了什么

for…in
仅迭代可枚举的属性。本机对象的默认属性通常是不可枚举的

您可以使用获取函数对象的属性列表:

> Object.getOwnPropertyNames(function() {})
["length", "name", "arguments", "caller", "prototype"]
或者,如果只是为了学习而检查属性,请使用
console.dir
记录函数:

var obj = {a:"hello",b=123};

我做错了什么

for…in
仅迭代可枚举的属性。本机对象的默认属性通常是不可枚举的

您可以使用获取函数对象的属性列表:

> Object.getOwnPropertyNames(function() {})
["length", "name", "arguments", "caller", "prototype"]
或者,如果只是为了学习而检查属性,请使用
console.dir
记录函数:

var obj = {a:"hello",b=123};

如果不同于

var obj = function(a, b) {}
如果希望A和B成为属性,则应这样做:

var obj = function(a, b) {
   this.a = a;
   this.b = b;
}
这样,obj.a和obj.b就更有意义了,但还没有那么多。 函数(){}是您的构造函数。因此,您需要实际构建一个实例,以便以正确的方式使用它

var myObj = new obj('value for a', 'value for b');
for (var prop in myObj) {
   // Prop = a || b
   console.log(prop);

   // Values for a and b
   console.log( myObj[ prop ] );
}
如果以静态方式使用它,则不必执行函数操作。 也不是说对象没有长度方法。数组可以

为了使这一点变得非常简单,并且完全不准确,{}(对象)是静态的,function(){}是可实例化的(这个词是否存在?),这意味着您可以使用“new”,从而受益于函数构造函数

这些都是非常技术性的,看起来您是从javascript开始的。如果我不清楚或者你需要一些精确性,请告诉我

希望有帮助

如果不同于

var obj = function(a, b) {}
如果希望A和B成为属性,则应这样做:

var obj = function(a, b) {
   this.a = a;
   this.b = b;
}
这样,obj.a和obj.b就更有意义了,但还没有那么多。 函数(){}是您的构造函数。因此,您需要实际构建一个实例,以便以正确的方式使用它

var myObj = new obj('value for a', 'value for b');
for (var prop in myObj) {
   // Prop = a || b
   console.log(prop);

   // Values for a and b
   console.log( myObj[ prop ] );
}
如果以静态方式使用它,则不必执行函数操作。 也不是说对象没有长度方法。数组可以

为了使这一点变得非常简单,并且完全不准确,{}(对象)是静态的,function(){}是可实例化的(这个词是否存在?),这意味着您可以使用“new”,从而受益于函数构造函数

这些都是非常技术性的,看起来您是从javascript开始的。如果我不清楚或者你需要一些精确性,请告诉我


希望有帮助。

JavaScript中的
函数可以称为“第一类”,因为它是一个可调用对象,意味着它是一个添加了可调用语义的对象。在某些方面,JavaScript中的
数组
类似于
函数
,因为它们都是对象,但都包含特殊功能。注意:关于JavaScript的一个常见说法是,但是这不是真的。简单原语
字符串
布尔
数字
,和
未定义的
)都不是对象(尽管如果您试图将它们视为对象,JS会做一些巧妙的操作)

bar
显示在所有三个属性中,因为这些属性默认设置为。但是,正如您所注意到的,函数还有一些其他属性,但这些属性没有显示出来。为什么?让我们先看一下obj

obj.propertyIsEnumerable('bar'); // true
默认情况下,
设置为可枚举

现在让我们看看
func
中的
bar

func.propertyIsEnumerable('bar'); // true
这就解释了为什么
bar
会出现在
func
中,但是
name

func.propertyIsEnumerable('name'); // false
啊哈!它不是可枚举的。对于许多通过JavaScript引擎自动链接或分配给对象的属性/方法来说,这是正确的。例如,数组对象的
length
属性

arr.propertyIsEnumerable('length'); // false
综上所述,如果你是JS新手,我强烈建议你阅读作者的《你不知道JS》系列。这是为有一些编程经验的人准备的,但是他们对于学习JS是什么和不是什么非常有用(不管有多少语法上的糖分)我特别建议关注经典继承和JavaScript之间的关键区别

介绍书是一本快速阅读的书,涵盖了整个系列将深入探讨的基础知识。本系列的其余部分(到目前为止)包括:、和。你也可以在他的网站上预览这些内容


您还可以查看MDN的文档以获得一些非常好的信息。

JavaScript中的
函数
可以称为“第一类”,因为它是一个可调用对象,意味着它是一个添加了可调用语义的对象。在某些方面,JavaScript中的
数组
类似于
函数
,因为它们都是对象,但都包含特殊功能。注意:关于JavaScript的一个常见说法是,但是这不是真的。简单原语
字符串
布尔
数字
,和
未定义的
)都不是对象(尽管如果您试图将它们视为对象,JS会做一些巧妙的操作)

bar
显示在所有三个窗口中,因为