如果我有JavaScript功能:
function Person(){}
在此之后Person.prototype
的值是多少?
Person.constructor
和Person.prototype.constructor
之间有什么区别?
如果我有代码:
function Student(){}
Student.prototype = new Person()
Student.prototype.constructor = Student
Student.prototype.constructor
设置为Student
?答案 0 :(得分:0)
- 在此之后Person.prototype的值是什么?
醇>
具有属性constructor
的对象,该对象指向函数对象。
- Person.constructor和Person.prototype.constructor之间有什么区别?
醇>
一个是函数对象的一部分,而另一个是原型对象的一部分,它将用于链接原型。在Person上使用new
操作数时,此新对象将不会继承constructor
。
function Student(){}
Student.prototype = new Person()
Student.prototype.constructor = Student
您正在创建Person的实例并将其指定为Student的Prototype。通过这样做,你也继承了Person的构造函数,你可能想要使用Student的构造函数。
通过创建Person的新对象,您还可以指定构造函数。否则,如果您完成了Student.prototype = Person.prototype
然后Student.prototype.constructor = Student
,那么您也会将Person.prototype.constructor
更改为Student
。
您仍然在调用构建函数,而function
正在使用new
。
答案 1 :(得分:0)
您的问题的答案将以微观细节进行解释,因此请查看本文,它是最好的文章之一Prototype。我使用了该文章中的所有答案
在此之后Person.prototype的值是什么?
function Person(){}
每当定义一个函数时,它都有一个名为 * prototype 的属性,它是不可枚举的。
此原型属性是 对象 ,它具有名为 构造函数 的非可枚举属性 < em>可写 , 可配置 。
这个构造函数只是对Function本身的引用,在这种情况下 Person
因此,如果您选中Person.prototype.constructor == Person
或Person.constructor == Person
。它会回归真实。 (后者与第一个表达式相同,通过属性委托)这将回答您的第二个问题。
Person.constructor和Person.prototype.constructor有什么区别?
Javascript属性委托,当你尝试访问对象中不存在的属性时,它会尝试检查其原型链接。
当你尝试访问Person.prototype对象上名为x
的属性时。
它将首先检查Person.prototype,因为没有名为x的属性。它会检查父母。哪个 Object.prototype (所有对象都是原型的。这将是你祖先链中的最后一个祖先)
第三个问题是关于创建继承Person Class的子类或对象
默认情况下,Student函数具有原型对象。执行此语句时new Person()
将创建一个对象并将创建的对象的引用传递给Person.call(this)
并将对象原型链接到
Person.prototype的。
Student.prototype = new Person()
此方法用于模仿子类继承。这样从 * new Student()创建的新对象也可以通过原型链接访问 Person 类方法和变量。
Student.prototype.constructor = Student
当你创建一个新的Student对象来检查继承时,需要这个语句,这样新对象就是Studentof
的实例 var bob = new Student()
所以当你想检查 bob instanceof Student 时。在后台,这将bob.constructor == Student
。由于bob没有构造函数属性,因此它将委托并签入Student。
如果你的想法仍然不清楚这个答案。请参考以上链接。关于原型
答案 2 :(得分:0)
function Person(){}
Person.prototype的值是什么?
instance._
_proto__ or Object.prototypeOf(instance) would return the Person.prototype
Person.constructor和Person.prototype.constructor
_
constructor is not Person's property, it is inherited from Person._
_proto__.
为什么要设置Student.prototype.constructor =学生?
案例1:不设置构造函数
_
Person.prototype.constructor.prototype..... This is because, Person.protoype.constructor refers to Person function itself
案例2:设置构造函数