首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数的__proto__

函数的__proto__
EN

Stack Overflow用户
提问于 2010-05-20 16:57:35
回答 2查看 525关注 0票数 4

如果我有一个名为Person的类。

代码语言:javascript
复制
var Person =  function(fname, lname){
    this.fname = fname;
    this.lname = lname;
}

Person.prototype.mname = "Test";
var p = new Person('Alice','Bob');

现在,p.__proto__引用Person的原型,但是,当我尝试执行Person.__proto__时,它指向function(),而Person.constructor指向Function()

有人能解释一下function()Function()之间的区别吗?为什么Function()类的原型是function()

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-21 03:42:36

有人能解释一下function()和Function()之间的区别吗?为什么Function()类的原型是function()?

__proto__是一个暴露[原型]的实现细节。[prototype]和构造器不需要(通常不是)同一件事。不管怎样..。

考虑这个假设:,它是一个impl。依赖于引擎函数的细节--在特定的引擎测试中(FF,哪个版本?),是一个对象,它本身就有一个[原型]的函数。function是原始的function-object。Person.prototype (默认情况下)的类型是function (原始的function-object),断言是这种明显的二分法的结果。(JS有一些怪癖:new Number(0)0不同。)

然而,在IE(8)中情况并非如此。在IE中,默认的原型是一个“纯对象”,而不是一个函数对象。

票数 2
EN

Stack Overflow用户

发布于 2010-05-20 18:04:07

在定义这样的函数时:

代码语言:javascript
复制
var Person = function (fname, lname){
    this.fname = fname;
    this.lname = lname;
}

这将使Person成为一个函数。函数是一个对象,它需要像任何其他“第一类”对象一样构造,所以它有一个构造函数:所有函数对象的构造函数,称为Function

所有函数的原型似乎都是一个名为function的对象。

我喜欢参考一个很好的explanation by Mike Koss,它让我学到了很多。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2872257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档