为了账号安全,请及时绑定邮箱和手机立即绑定

JS原型链

JS原型链

神不在的星期二 2019-03-13 14:15:43
   var Human = function (name) {        this.name = name;    }    Human.prototype.sayName = function () {        console.log(this.name);    }    var klam = new Human('klam');输出 Human.__proto__的时候,按理该输出Function.prototype,但再Chrome浏览器中显示: function Empty () {}。再输出 Human.__proto__.constructor,结果为:function Function() { [native code] },这没问题最后不死心再试试 Human.__proto__.constructor.prototype,又成:function Empty() {}了。这个function empty究竟是个什么?
查看完整描述

5 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

function Empty(){} 就是 Function.prototype 这是一个内置的对象,是所有非host函数的原型。

如果你对它为啥叫Empty比较好奇的话,嗯,答案是不为啥,随便起了个名,也许因为
Function.prototype()这样执行了以后啥都不会干吧,不同引擎也不一样。

啥叫非host函数,JS里面带有[[call]]私有方法的对象都叫函数,这样的对象分为两类:
一类是JS语言原生的,包括Function构造器构造的、内置的、function关键字声明的或者function表达式创建的,比如function a(){}或者Math.cos这些都是原生函数;
另一类是宿主对象提供的,比如浏览器宿主提供的setTimeout就属于host函数。

https://img1.sycdn.imooc.com//5cb1887e00016c4904210257.jpg

SF原题what-is-function-empty-in-javascript
知乎原题function Empty是一个什么样的东西

查看完整回答
反对 回复 2019-04-13
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

我觉得对着呢。
对象的内部属性[[Prototype]](也就是楼主提到的proto)指向该对象的构造函数的原型对象。
那么:

Human.__proto__===Function.prototype;//true

chrome运行结果为true。
至于指向的东西,我也不懂。


查看完整回答
反对 回复 2019-04-13
?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

见 ECMAScript 规范

15.3.4 Properties of the Function Prototype Object

The Function prototype object is itself a Function object (its [[Class]] is "Function") that, when invoked, accepts any arguments and returns undefined. The value of the internal [[Prototype]] property of the Function prototype object is the Object prototype object (section 15.3.2.1).

It is a function with an “empty body”; if it is invoked, it merely returns undefined. The Function prototype object does not have a valueOf property of its own; however, it inherits the valueOf property from the Object prototype Object.


查看完整回答
反对 回复 2019-04-13
?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

proto在chrome下不能直接访问到的,想看去ff下看。


查看完整回答
反对 回复 2019-04-13
?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

Human.proto 指的是实例化Human的原型吧 说白了Human = new Function(XXX) 然后就好理解了 我是这么认为的 具体的就不知道了


嗯 说的有点模糊 Human是一个function同时也是Function的一个实例 proto指的是他继承的原型链而不是本身的原型链 所以Human.proto = Function.prototype


查看完整回答
反对 回复 2019-04-13
  • 5 回答
  • 0 关注
  • 758 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信