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
属性。原型只是对象,可以修改,而不是类
阅读更多:
- ,