为何实例化对象无法调用getPrototypeOf方法,而Object本身可调用?
为什么实例化对象不能直接调用
Object.getPrototypeOf? Object.getPrototypeOf是Object构造函数的静态方法,它属于Object这个构造函数本身,而非挂载在Object.prototype上的实例方法。这就导致了两个关键区别:
- 静态方法只能由构造函数(也就是
Object)调用,不能由它的实例对象(比如你创建的obj)调用 - 实例对象能访问的方法,都是定义在其原型链上的方法(比如
obj.toString(),因为toString在Object.prototype上,所有对象实例都能继承到)
正确用法示例
const obj = {}; // 正确调用静态方法 console.log(Object.getPrototypeOf(obj)); // 输出 Object.prototype // 实例调用原型上的方法(正常工作) console.log(obj.toString()); // "[object Object]"
从实例获取原型的替代方案
如果习惯从实例出发获取原型,有两个可选方式,注意区分使用场景:
obj.__proto__:非标准属性(多数浏览器支持,但不推荐生产环境使用)Reflect.getPrototypeOf(obj):ES6新增的标准方法,和Object.getPrototypeOf功能一致,属于更现代的写法
内容的提问来源于stack exchange,提问作者Murtaza Raja
相关产品推荐
相关产品推荐

