如果函数是javascript中的对象,为什么function.constructor指向函数而不是对象?
当像这样从窗口对象创建以下函数时如果函数是javascript中的对象,为什么function.constructor指向函数而不是对象?,javascript,Javascript,当像这样从窗口对象创建以下函数时 function userInfo() {}; 既然函数是对象,为什么userInfo.constructor会显示函数而不是对象 当使用以下命令时,它甚至显示函数而不是对象 Function.constructor 函数是高级对象。实际上,函数是一个对象。这就是为什么你可以给你的函数赋值,比如userInfo.anotherFunction=function(){return'something}然后调用userInfo
function userInfo() {};
既然函数是对象,为什么userInfo.constructor会显示函数而不是对象
当使用以下命令时,它甚至显示函数而不是对象
Function.constructor
函数是高级对象。实际上,函数是一个对象。这就是为什么你可以给你的函数赋值,比如
userInfo.anotherFunction=function(){return'something}
然后调用userInfo.anotherFunction()代码>。这就是为什么你们两个都有
var obj = {};
function myFunc() {}
console.log(obj.constructor)
console.log(myFunc.constructor)
这两个函数都将作为构造函数打印函数。
简单地说,如果每个对象都有.constructor
属性,并且javascript中的任何函数本身就是对象,那么您肯定会在任何函数上都有.constructor
属性
函数也是任何函数的构造函数。任何构造函数都是函数,这就是为什么函数也有.constructor属性
检查此链接userInfo。构造函数
是函数
,因为:
userInfo
没有自己的构造函数
属性
userInfo
的[[Prototype]]内部插槽的值是Function.Prototype
Function.prototype
有一个自己的constructor
属性,其值为Function
Function.constructor
也是Function
,原因相同:
函数
没有自己的构造函数
属性
Function
的[[Prototype]]内部插槽的值为Function.Prototype
Function.prototype
有一个自己的constructor
属性,其值为Function
也就是说,函数
实例(如用户信息
或函数
本身)从函数继承构造函数
属性。原型
,可以用来知道它们是函数的实例
任何对象的构造函数属性值都是从其原型对象的构造函数
属性值继承的
对象的原型设置为创建时用于构造它的函数(对象)的prototype
属性值
由于函数对象是使用全局函数
构造函数创建的,因此它们继承函数
作为其构造函数
属性:
function Foo(){}; // Foo is constructed by global object "Function".
Foo.constructor; // Function, inherited from Function.prototype.constructor property
注意函数
的原型对象设置为函数。本机代码中的原型
:
Object.getPrototypeOf(Function) === Function.prototype // is true.
这会使添加到Function.prototype的任何属性都由Function继承。这是可取的,因为函数
当然是一个函数。作为一种隐含的副作用,它也会导致本机代码函数
作为自身的构造函数返回
此外:
Function.prototype
是对象的实例,因此函数对象也继承自Object.prototype
- 在代码中使用“constructor”属性不能保证安全。虽然不能为
函数
更改prototype
属性及其构造函数
属性,但通常情况下,函数对象也不受写保护
数组是具有数组构造函数的对象。日期实例是具有日期构造函数的对象。有些东西可以是对象,而不是由对象构造函数构造。函数
s是对象,而不是对象
s。另请参见更正,obj.constructor打印出//Objecthm。。检查这个,这里hello.constructor是一个函数