javascript - 为什么 Function.__proto__ 返回与其他原型(prototype)不同的东西?

标签 javascript prototype

如果您尝试打印 __proto__常规对象的属性,例如 {}.__proto__foo.__proto__ ,你得到[object object] ;这个[object object]是另一个对象的原型(prototype)。但是,如果您尝试打印 __proto__任何函数的属性,它都会给你 function () { [native code] } 。这是为什么 ?它不应该返回Function对象的原型(prototype)吗?继承自,哪个应该是一个对象而不是另一个函数(如 function(){native code]} )? __proto__怎么可能?一个函数的 是另一个函数而不是一个对象,就像其他原型(prototype)一样?

*我知道应该使用 Object.getPrototypeOf(obj) 而不是 proto,但我使用它,因为它更短。

如果有人向我解释以上内容,我也将不胜感激。如果您对我的问题有任何疑问,请在评论中提问,而不是投反对票。

最佳答案

原因

Function.prototype.toString()

将返回

"function (){ [native code] }"

Function.prototype 是一个对象,但当您打印它时,它会被类型转换为字符串,并且作为原型(prototype)实现函数的行为:

function(){}.toString() 

即使它不是一个函数,它也会打印出来。

function(){}
 .__proto__ // Function.prototype
 .__proto__ // Object.prototype
 .toString() // "[Object object]

也许更容易想象:

class Human {
  toString(){
    return "Im a Human";
  }
}

console.log( 
(new Human).__proto__
);
//the Human.prototype tells you that it is a Human, however its just a class.

关于javascript - 为什么 Function.__proto__ 返回与其他原型(prototype)不同的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46129847/

相关文章:

javascript - 在确认弹出窗口进入 Angular 4之前如何获取刚刚点击的网址

javascript - Typeahead:如何将数据列表分为 3 个不同的部分? [如多数据集]

javascript - 替代(或相同?)作为 javascript 原型(prototype)

javascript - 在 var x = function() 内重写 this.method = function()

javascript - 如何从 Javascript 中的自定义对象继承所有事件处理程序

javascript - javascript Codeigniter 中的 Json 对象

javascript - onFocus 时扩展文本区域

javascript - jQuery ui 菜单全局范围

javascript - 隐藏值的 Magento 表单验证

javascript - 使 Bootstrap Dropdown 在 Magento 中工作/使用原型(prototype)