结合使用JS的Prototype和Constructor属性
Using the Prototype and Constructor Properties of JS in conjunction
根据我的理解,Prototype对象是一个其他对象从中继承属性和方法的对象,基本上它拥有一个构造函数属性,该属性指向或指向创建该对象的构造函数函数。请考虑以下代码:
function Animal()
{
this.name="no name";
}
function Cat()
{
Animal.Call(this); //Please Explain
this.mood="sleepy";
}
Cat.prototype=new Animal(); //Cat inheriting Animal?
Cat.prototype.constructor=Cat; //Please Explain
请解释清楚但详细的代码行与意见和反思的概念,谢谢。
Animal.call(this)
的用途是什么
这就像在其他编程语言中调用super()
一样。它在刚刚创建的新对象(this
)上调用父构造函数(Animal
)。关于.call
的MDN文档中也对此进行了解释。
在您的示例中,Animal
将"no name"
分配给this.name
。因此,在调用Animal.call(this);
之后,this
将具有具有上述值的name
属性。
和
Cat.prototype.constructor=Cat;
默认情况下,每个原型的constructor
属性都指向它所属的函数。但由于用Cat.prototype=new Animal();
覆盖了原型,constructor
属性现在指向了不同的函数。在这种情况下,由于new Animal
返回从Animal.prototype
继承的对象,因此Cat.prototype.constructor
将指向Animal
。为了解决这个问题,我们再次分配Cat
。
严格来说,这是不必要的,因为constructor
属性没有在任何内部函数中使用。但是,如果您的代码依赖于它,则必须将它设置为正确的值。
相关文章:
- RegEx删除空属性?例如,如果(class=“”||class=“”)移除;否则就下课
- 全局变量和全局对象的属性之间有什么区别吗
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 如何在Bootstrap Modal中为动态点击生成的变量设置jade属性
- 序列化数据属性中对象的最可靠方法
- 分析高度属性时出现意外值{{specs.height}}.index.html
- TypeError:无法读取属性'推'未定义的JavaScript
- 同样,同样的错误'ahorcado.js:26未捕获类型错误:无法读取属性'beginPath'
- AngularJS-使用'true'属性
- 可以't使用JavaScript获取width属性
- 未捕获的TypeError无法读取未定义的属性socialsharing
- 如何使用javascript获取嵌套对象中所有子对象的单个属性
- JavaScript Pub/Sub属性访问问题
- 从JavaScript访问struts操作中的属性
- “new”关键字是在构造对象时自动设置“constructor”属性的唯一方法吗
- 在Javascript中,为什么constructor属性指向原型链中最基本的构造函数?
- 将this.constructor与构造函数调用一起使用以访问静态属性时是否存在兼容性问题
- 结合使用JS的Prototype和Constructor属性
- When是实际使用的对象的“.constructor”属性
- 原型继承-什么时候需要设置'prototype.constructor'属性