Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果函数是javascript中的对象,为什么function.constructor指向函数而不是对象?_Javascript - Fatal编程技术网

如果函数是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是一个函数