1

每个函数对象都有__proto__其内部属性。他们也prototype有财产。因为prototype它也是一个对象,所以它也有一个__proto__属性。我的问题是,__proto__原型内部和函数对象中的属性是否都指向Function.prototype

4

4 回答 4

1

不,函数的原型属性(即SomeFunc.prototype)是一个普通对象,因此它的内部__proto__属性指向Object.prototype

简单的测试方法:

function Foo() {};
console.log(Object.getPrototypeOf(Foo) === Object.getPrototypeOf(Foo.prototype));
// logs false
console.log(Object.getPrototypeOf(Foo) === Function.prototype);
// logs true
console.log(Object.getPrototypeOf(Foo.prototype) === Object.prototype);
// logs true

只有函数继承自Function.prototype,没有其他对象。

于 2013-01-27T18:17:16.153 回答
1

函数的属性命名prototype是一个普通对象,它成为使用该函数作为构造函数时创建的对象的原型。

函数的实际原型(可通过 访问__proto__)是一个名为 的对象Function.prototype,它按顺序从Object.prototype.

图表

于 2013-01-27T18:19:50.287 回答
0

不。

hidden__proto__属性实际上不应该被 JS 程序员直接使用,它是作为将对象绑定到其原型链的粘合剂。

像这样:

function x () {}

x.__proto__; // is a prototypical function, leading back to `Function.prototype`

但是,prototype它只是一个对象,它在函数内部被分配给__proto__您正在创建的任何内容的属性new

由于它只是一个常规对象,__proto__最终会导致返回Object.prototype.

于 2013-01-27T18:18:41.497 回答
0

使用运算符时,该__proto__属性指向函数。constructornew

如果您的构造函数是 instanceof Function,则对象中的所有属性和方法Function.proptotype都可以被实例访问,并且将使用与上下文相同的内容。

有些浏览器没有实现对__proto__对象的访问,所以如果你不想使用,就会失去兼容性。

MDN 文档中的更多信息:https ://developer.mozilla.org/en/docs/JavaScript/Reference/Global_Objects/Object/proto

于 2013-01-27T18:19:46.440 回答