我下面就JS继承的视频教程,我被困在最后2行的代码如下:JavaScript继承。从另一个类继承的对象和方法
上述假设有一个Animal
类,我们希望使用属性和方法。
我似乎获得倒数第二:Cat.prototype = new Animal()
。它是否认为给猫的原型分配一个新的动物物体?但我无法理解最后一行代码。
我下面就JS继承的视频教程,我被困在最后2行的代码如下:JavaScript继承。从另一个类继承的对象和方法
上述假设有一个Animal
类,我们希望使用属性和方法。
我似乎获得倒数第二:Cat.prototype = new Animal()
。它是否认为给猫的原型分配一个新的动物物体?但我无法理解最后一行代码。
我会推荐阅读这篇文章
的prototype
属性提供的方法和属性会从您通过Cat
构造函数创建一个对象被继承的对象。而constructor
不过是一个常规属性,通常用于标识用于创建对象的构造函数。
Cat.prototype = new Animal()
指Cat
类继承该方法和Animal
类,最可能的性能,因为Cat
是Animal
,和再利用从Animal
类Cat
类浪费时间的方法。
Cat.prototype.constructor = Cat
只是使Cat
类的构造函数成为上面为所有Cat
对象所做的构造函数。
首先,JavaScript不是基于类的语言。它不知道类的概念,但它知道对象和这两个组件,我们可以模拟类的行为并实现继承。
但是,由于这一切都是一种解决方法,我们有时必须付出额外的努力才能使其发挥作用。并且这是您最后一行Cat.prototype.constructor = Cat
进来的地方。
每个函数的prototype
属性都有一个属性,称为constructor
,它指向函数本身。因此,当您将该函数用作构造函数时,内部对象[[prototype]]
也具有constructor
属性。
function Cat() {
}
var cat = new Cat();
console.log(Cat.prototype.constructor); //Cat
console.log(cat.constructor); //Cat
但是,如果你申请你的遗传模式,重写的Cat
完整prototype
财产及其所有属性,包括constructor
财产。
function Cat() {
}
Cat.prototype = new Animal();
var cat = new Cat();
console.log(Cat.prototype.constructor); //Animal
console.log(cat.constructor); //Animal
为了解决这个问题,我们必须手动设置constructor
属性:
function Cat() {
}
Cat.prototype = new Animal();
Cat.prototype.constructor = Cat;
var cat = new Cat();
console.log(Cat.prototype.constructor); //Cat
console.log(cat.constructor); //Cat
我明白了!你不能做新的猫(),因为如果我们这样做,我们错过了动物的所有属性和方法。对? – user3162361
如果您阅读参考文章,您会发现构造函数属性不会执行任何功能,您可以使用它进行操作! – ColinE