Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.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 为什么函数原型被反复链接?_Javascript - Fatal编程技术网

Javascript 为什么函数原型被反复链接?

Javascript 为什么函数原型被反复链接?,javascript,Javascript,我对JavaScript非常陌生。我在读JavaScript的好部分。它说: 每个函数对象也使用原型属性创建 所以我做了这样的事情: function test() { } console.log(test.prototype); 使用Chrome的开发工具,我发现输出如下: 我真的对这个输出感到困惑。为什么构造函数的原型属性再次与构造函数嵌套?为什么这会像链条一样继续?我错过了什么概念 提前谢谢 函数的prototype属性包含一个对象,当使用new操作符创建时,该函数的所有实例都将从该

我对JavaScript非常陌生。我在读JavaScript的好部分。它说:

每个函数对象也使用原型属性创建

所以我做了这样的事情:

function test() {
}

console.log(test.prototype);
使用Chrome的开发工具,我发现输出如下:

我真的对这个输出感到困惑。为什么
构造函数
原型
属性再次与
构造函数
嵌套?为什么这会像链条一样继续?我错过了什么概念


提前谢谢

函数的
prototype
属性包含一个对象,当使用
new
操作符创建时,该函数的所有实例都将从该对象继承。所有这些原型对象(通常)都有一个
constructor
属性,它指向函数——这里有循环引用。因此,作为一个
newtest()
继承了该属性,
(newtest).constructor===test
的计算结果为
true

您需要区分函数对象的
prototype
属性和对象继承的原型对象-通常被称为“内部
[[prototype]]]
属性”

构造函数是一个函数,更不用说是一个
函数
,两者都有。因此,它继承自
函数.prototype
对象,其中
构造函数
属性表示所有函数都是由
函数
构造函数构造的。如果开发人员控制台显示
函数
对象的原型,您可以看到它们。我认为设置中有一个选项

因此,著名的“原型链”不是关于
构造函数
和/或
原型
属性,而是关于该对象从中继承的原型对象:

 function test() {}              new test()
   (a Function)              (a test instance)
        ||                           ||
        ||                           ||
        \/                           \/
 Function.prototype            test.prototype
(a Function, by spec)           (an Object)
        ||                           ||
        ||                           ||
        \/                           \/
 Object.prototype             Object.prototype
        ||                           ||
        ||                           ||
        \/                           \/
       null                         null

那是一本很好的书

它从程序员的角度涵盖了更多的javascript,涵盖了所有面向对象的技术,其中的大部分内容在其他任何关于javascript的书籍中都没有涉及

关于原型。 JavaScript中的每个对象都有一个隐藏的状态片段——对另一个对象的引用,称为对象的原型。 JavaScript中的原型对象为我们提供了继承,它们也允许我们共享方法实现。原型还包括链。换句话说,因为原型对象只是一个对象,所以原型对象可以维护对另一个原型对象的引用

Javascript中的原型并不像我在学习时所经历的那个样复杂


这是一个很好的了解js中prototype如何工作的方法。

感谢链接,我已经在控制台中快速检查
Object.getPrototypeOf(test)
时想知道输出结果了……回答得很好。。从你的答案中可以得到很多东西:)@Bergi-请解释-“构造函数是一个函数,更不用说函数了,并且两者都有。因此它继承自function.prototype对象”@jason:A“构造函数函数”是a)具有
.prototype
属性的构造函数和b)从其原型继承属性的对象(更具体地说是
函数
实例)。