Javascript 获取函数对象的属性
我正在学习面向对象的javascript,来自 根据教程,函数本身被视为一个对象,我知道可以使用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
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
显示在所有三个窗口中,因为