`Object.getPrototypeOf()` 方法返回指定对象的原型（内部`[[Prototype]]`属性的值）。

## 语法

    Object.getPrototypeOf(object)

### 参数

`obj`
  要返回其原型的对象。

### 返回值

  给定对象的原型。如果没有继承属性，则返回 `null` 。

## 示例

    var proto = {};
    var obj = Object.create(proto);
    Object.getPrototypeOf(obj) === proto; // true

    var reg = /a/;
    Object.getPrototypeOf(reg) === RegExp.prototype; // true

### 说明

Object.getPrototypeOf(Object) 不是 Object.prototype

    JavaScript中的 Object 是构造函数（创建对象的包装器）。
    一般用法是：
    var obj = new Object();

    所以：
    Object.getPrototypeOf( Object );               // ƒ () { [native code] }
    Object.getPrototypeOf( Function );             // ƒ () { [native code] }

    Object.getPrototypeOf( Object ) === Function.prototype;        // true

    Object.getPrototypeOf( Object )是把Object这一构造函数看作对象，
    返回的当然是函数对象的原型，也就是 Function.prototype。

    正确的方法是，Object.prototype是构造出来的对象的原型。
    var obj = new Object();
    Object.prototype === Object.getPrototypeOf( obj );              // true

    Object.prototype === Object.getPrototypeOf( {} );               // true

## Notes

在 ES5 中，如果参数不是一个对象类型，将抛出一个`TypeError`异常。在 ES2015 中，参数会被强制转换为一个 `Object`。

    Object.getPrototypeOf('foo');
    // TypeError: "foo" is not an object (ES5 code)
    Object.getPrototypeOf('foo');
    // String.prototype                  (ES2015 code)

## 规范

Specification | Status | Comment
--- | --- | ---
ECMAScript 5.1 (ECMA-262) Object.getPrototypeOf | Standard | Initial definition.
ECMAScript 2015 (6th Edition, ECMA-262) Object.getPrototypeOf | Standard |
ECMAScript Latest Draft (ECMA-262) Object.getPrototypeOf | Draft |

## 浏览器兼容

The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.

Update compatibility data on GitHub

| Desktop | Mobile | Server
| Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | Android webview | Chrome for Android | Edge Mobile | Firefox for Android | Opera for Android | Safari on iOS | Samsung Internet | Node.js
`getPrototypeOf` | Chrome Full support 5 | Edge Full support 12 | Firefox Full support 3.5 | IE Full support 9 | Opera Full support 12.1 | Safari Full support 5 | WebView Android Full support Yes | Chrome Android Full support Yes | Edge Mobile Full support Yes | Firefox Android Full support 4 | Opera Android Full support Yes | Safari iOS Full support Yes | Samsung Internet Android Full support Yes | nodejs Full support Yes

### Legend

Full support
  Full support

## Opera 特别提示

即使旧版本Opera不支持`Object.getPrototypeOf()`，Opera 10.50之后还支持非标准的 `__proto__`属性。

## 相关链接

- `Object.prototype.isPrototypeOf`
- `Object.setPrototypeOf()`
- `Object.prototype.__proto__`
- John Resig's post on getPrototypeOf
- `Reflect.getPrototypeOf()`
- `AsyncFunction`