Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.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_Inheritance_Prototype_Prototypal Inheritance_Proto - Fatal编程技术网

Javascript 函数构造函数原型

Javascript 函数构造函数原型,javascript,inheritance,prototype,prototypal-inheritance,proto,Javascript,Inheritance,Prototype,Prototypal Inheritance,Proto,如果 let变量=新函数构造函数() FunctionConstructor.prototype有什么语义[…]呢 它是在定义FunctionConstructor时创建的对象。因此,无论何时定义函数,它都会立即获得对象属性(prototype)。在函数不能用作构造函数的情况下存在一些例外(例如箭头函数、类的成员等) 这个对象可以像其他对象一样被赋予成员。在旧式代码中,您经常会看到FunctionConstructor.prototype.myMethod=..。在现代版本中,您将看到类语法,

如果

let变量=新函数构造函数()
FunctionConstructor.prototype
有什么语义[…]呢

它是在定义
FunctionConstructor
时创建的对象。因此,无论何时定义函数,它都会立即获得对象属性(
prototype
)。在函数不能用作构造函数的情况下存在一些例外(例如箭头函数、类的成员等)

这个对象可以像其他对象一样被赋予成员。在旧式代码中,您经常会看到
FunctionConstructor.prototype.myMethod=..
。在现代版本中,您将看到
语法,这将导致
原型
对象的类似初始化

每当使用
new
调用构造函数时,此对象将用作原型。当这种调用发生时,甚至在执行该函数的任何语句之前,都会创建一个新对象,该对象将在函数执行期间成为
this
,并由
new
返回。
对象将其
\uuuu proto\uuuu
属性设置为该原型对象,从而建立原型链。这就是原型开始发挥作用的时刻

如果
let variable=newfunctionconstructor()FunctionConstructor
(因为它是使用操作符
newfunctionconstructor();
)创建的)

不,这不是真的。
变量
不会从
FunctionConstructor
继承任何内容
FunctionConstructor
是一个对象(一个函数对象),它有自己的原型(这不是它的
prototype
属性,而是它的
\uuuuuuuuuuuu
属性),而该链与
变量
完全无关

它有助于可视化这两个独立的原型链。看,我在书中详细阐述了这一点

…另一方面,
variable.\uuuuu\uuuuu=FunctionConstructor.prototype
(同样是因为它是用
new
操作符创建的),即
variable
prototype通常继承自
FunctionConstructor.prototype

这是真的

原型遗传和正常遗传有什么区别

有很多不同之处。以下是一些:

经典继承依赖于类,类为实例提供模板。类定义层次结构,但实例不能相互继承。原型继承依赖于构造函数及其
prototype
属性。原型只是对象,可以修改,而不是类

阅读更多:

  • ,