FunctionConstructor.prototype

问题描述

如果

let variable = new FunctionConstructor();

然后variable.__proto__ = FunctionConstructor.prototype。什么是variable .__ proto__(继承自variable的对象),但没有什么等同于构造函数prototype属性

  1. FunctionConstructor.prototype有什么语义含义(最好与现实世界对象有关)?”
  2. 如果为let variable = new FunctionConstructor ();,则一方面variable继承自 FunctionConstructor(因为它是使用运算符new FunctionConstructor ();创建的),另一方面, variable .__ proto __ = FunctionConstructor.prototype(同样是因为它是由new运算符创建的),即 variable的原型继承自FunctionConstructor.prototype。原型继承与普通继承有什么区别?

解决方法

FunctionConstructor.prototype有什么语义[...]?

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

可以给该对象其他成员一样的成员。在旧代码中,您经常会看到FunctionConstructor.prototype.myMethod = ....。在现代版本中,您会看到class语法,该语法会对该prototype对象进行类似的初始化。

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

如果为let variable = new FunctionConstructor ();,则一方面,变量从FunctionConstructor继承(因为它是使用运算符new FunctionConstructor ();创建的),

不,这是不正确的。 variable将不会继承FunctionConstructor的任何内容。 FunctionConstructor是具有自身原型(不是其prototype属性,而是其__proto__属性)的对象(函数对象),并且该链与{{1 }}。

它有助于可视化这两个独立的原型链。参见How does JavaScript .prototype work?,我在my answer中对此进行了详细说明。

...,另一方面,variable(同样是因为它是使用variable.__ proto __ = FunctionConstructor.prototype运算符创建的),即new的原型继承自variable

这是真的。

原型继承与普通继承有什么区别?

有很多区别。这里有一些:

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

了解更多:

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...