首先遵循以下代码:

function User(name, dept){
    this.username = name;
    this.dept = dept;
    this.talk = function(){
        return "Hi";
    };
}

function Employee(){
    User.apply(this, Array.prototype.slice.call(arguments));
}

Employee.prototype = new User();


for(var x in Employee.prototype)
    console.log(x, ':', Employee.prototype[x]);

Object.keys(Employee.prototype);//prints array of keys...


打印得很好...

Array.prototype; //[]
Array.prototype.slice; // Function

var o = Array.prototype;

for(var i in o) console.log(i, ':', o[i]); //it doesn't execute
Object.keys(Array.prototype); //[] - ???


如何解释这种行为?

我们可以为尝试创建的构造函数模仿吗?

最佳答案

Object.keys()-MDN


  Object.keys()方法返回给定对象自己的可枚举属性的数组...


我们可以检查给定的属性是否可枚举:

Array.prototype.propertyIsEnumerable('push');
// false


或者,我们可以获取对象属性的完整描述符,其中还将包含可枚举标志。

Object.getOwnPropertyDescriptor(Array.prototype, 'push');
// {writeable: true, enumerable: false, configurable: true}


Array.prototype上的属性是故意不可枚举的,因此它们不会出现在for...in loops中。

关于javascript - 为什么Object.keys(Array.prototype)返回空数组?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27267794/

10-13 08:26