Javascript 为什么Object.getOwnPropertyNames()也给出了原型上的方法?

Javascript 为什么Object.getOwnPropertyNames()也给出了原型上的方法?,javascript,Javascript,var properties=Object.getOwnPropertyNames(数组); console.log(属性)它工作正常 Object.getOwnPropertyNames()返回一个数组,该数组的元素是对应于直接在obj上找到的可枚举和不可枚举属性的字符串 var-propertiesOfArray=Object.getOwnPropertyNames(数组); 控制台日志(PropertiesFarray); var propertiesOfArrayPrototype=

var properties=Object.getOwnPropertyNames(数组);

console.log(属性)它工作正常

Object.getOwnPropertyNames()返回一个数组,该数组的元素是对应于直接在obj上找到的可枚举和不可枚举属性的字符串

var-propertiesOfArray=Object.getOwnPropertyNames(数组);
控制台日志(PropertiesFarray);
var propertiesOfArrayPrototype=Object.getOwnPropertyNames(Array.prototype);

console.log(propertiesofarray原型)它工作正常

Object.getOwnPropertyNames()返回一个数组,该数组的元素是对应于直接在obj上找到的可枚举和不可枚举属性的字符串

var-propertiesOfArray=Object.getOwnPropertyNames(数组);
控制台日志(PropertiesFarray);
var propertiesOfArrayPrototype=Object.getOwnPropertyNames(Array.prototype);


console.log(propertiesofarray原型)您必须在Firefox上。它确实实现了
数组
构造函数的非标准扩展,其中位于
数组
本身。它们是自己的属性,与
Array.prototype
上的属性名称相同,但值不同。它们不存在于其他浏览器中,也不存在。

您必须在Firefox上。它确实实现了
数组
构造函数的非标准扩展,其中位于
数组
本身。它们是自己的属性,与
Array.prototype
上的属性名称相同,但值不同。它们在其他浏览器中也不存在。

是否向数组原型添加了自定义属性?否。
Array.prototype
对每个数组对象都有方法(程序中的每个数组都可以使用它们,因为每个数组都继承自
Array.prototype
)。在上面的代码片段中,我只询问
数组
对象的属性,该对象是
函数
对象。并且具有上面列出的属性。我的问题是为什么代码也列出了
数组.prototype
上的属性?我无法复制。当我将代码粘贴到控制台中时,结果是
[“length”、“name”、“arguments”、“caller”、“prototype”、“isArray”、“from”、“of”]
。你得到了什么?您使用的浏览器是什么?为什么希望
Array.constructor
Array.observe
Array.unobserve
?这些似乎是继承的。我作为输出得到的数组包含25个元素。其中包括
Array.prototype
上的方法,如
Array.prototype.filter()
。这对我来说很奇怪,因为我只希望列出
Array
的属性。我在Firefox上。您向Array prototype添加了自定义属性?否。
Array.prototype
对每个数组对象都有方法(程序中的每个数组都可以使用它们,因为每个数组都继承自
Array.prototype
)。在上面的代码片段中,我只询问
数组
对象的属性,该对象是
函数
对象。并且具有上面列出的属性。我的问题是为什么代码也列出了
数组.prototype
上的属性?我无法复制。当我将代码粘贴到控制台中时,结果是
[“length”、“name”、“arguments”、“caller”、“prototype”、“isArray”、“from”、“of”]
。你得到了什么?您使用的浏览器是什么?为什么希望
Array.constructor
Array.observe
Array.unobserve
?这些似乎是继承的。我作为输出得到的数组包含25个元素。其中包括
Array.prototype
上的方法,如
Array.prototype.filter()
。这对我来说很奇怪,因为我只希望列出
Array
的属性。我在Firefox上,上面写着直接在obj上找到的
。这意味着返回的属性应该是对象上的
,如
Array.observe
Array.length
。但是
Object.getOwnPropertyNames(Array)
返回的属性中有
Array.prototype
对象上的属性。为什么会这样?@LearningMath此答案的输出不包括原型的属性。如果执行
Object.getOwnPropertyNames(Array.prototype)
操作,您将看到所有方法。是的,输出包含
Array.prototype
上的方法,类似于
Array.prototype.filter()
。打印的数组包含25个元素。这对我来说很奇怪。@LearningMath看起来像是依赖浏览器的行为。我刚刚用firefox测试了它,你从chrome得到了不同的输出。在这种情况下,这只是各个团队做出的设计决策。@Andrew我在Chrome中运行代码片段,得到不同的输出,数组中也有6项。所以我认为这是实现驱动的行为,它说的是直接在obj上找到的
。这意味着返回的属性应该是对象上的
,如
Array.observe
Array.length
。但是
Object.getOwnPropertyNames(Array)
返回的属性中有
Array.prototype
对象上的属性。为什么会这样?@LearningMath此答案的输出不包括原型的属性。如果执行
Object.getOwnPropertyNames(Array.prototype)
操作,您将看到所有方法。是的,输出包含
Array.prototype
上的方法,类似于
Array.prototype.filter()
。打印的数组包含25个元素。这对我来说很奇怪。@LearningMath看起来像是依赖浏览器的行为。我刚刚用firefox测试了它,你从chrome得到了不同的输出。在这种情况下,这只是各个团队的设计决策。@Andrew我在Chrome中运行代码片段,得到不同的输出,在t中有6项