答案 0 :(得分:3)
Object
本身定义了一些方法,例如Object.keys
。这些没有在Object.prototype
上定义,因此它们在对象实例上不可用。
答案 1 :(得分:3)
构造函数有两种不同的方法:
原型方法
定义为Constructor.prototype
的属性,仅在实例上可用。
静态方法
定义为Constructor
本身的属性,仅在构造函数中可用。
ES6 classe说清楚
class Constructor {
static foo() { return 123; }
bar() { return 456; }
}
Constructor.foo(); // 123
Constructor.bar; // undefined
new Constructor().foo; // undefined
new Constructor().bar; // 456
然而,您的情况很特殊:Object
构造函数的静态方法似乎包含原型方法。但那是因为Object
继承自Object.prototype
。
原型链就像
Object
实例
instance -> Object.prototype -> null
Object
构造函数
Object -> Function.prototype -> Object.prototype -> null
答案 2 :(得分:1)
从技术上讲,Object
(构造函数)不属于object
类型,它是一个类/函数,具体取决于您希望与JS一起使用的术语。因为它是一个类,所以它上面有没有在该对象的实例中使用的方法。 IE:他们不在返回的对象原型上。
在Chrome控制台中,试试这个:
var obj = {};
typeof obj; // "object"
typeof Object; // "function"
当你有机会时,研究类原型在JS中的工作方式。
为了澄清一点,当你运行new Object()
时,它会返回类型为object
且具有必要方法的内容。
我认为这是我所谈论的一个很好的参考:JavaScript - The Good Parts: Function prototypes vs Object prototypes
您可以在Number
和String
中看到相同的行为。两者的类型实际上都是function
,但是一旦创建它们,您就会获得number
或string
类型之一,每个类型都有相关的原型方法。
底线是构造函数与返回值不同。