如何解决了解 JavaScript 中的原型继承
这两个块的不同之处在于,在第一个示例Drive()
中仅存在一次,而在第二种方法Drive()
中,每个实例都将存在(每次执行new
Car()
该函数drive()
时都会再次创建该函数)。或者不同的是,第一个使用原型存储函数,第二个使用构造函数。函数的查找是构造函数,然后是原型。因此,Drive()
无论它是在构造函数中还是原型中,查找它都会找到它。使用原型更有效,因为通常每种类型只需要一个函数。
javascript 中的new
调用会自动设置原型中的构造函数。如果要覆盖原型,则必须手动设置构造函数。
javascript 中的继承与super
. 因此,如果您有一个子类,那么调用超级构造函数的唯一机会就是通过它的名称。
解决方法
我是 JavaScript OOP 的新手。您能解释一下以下代码块之间的区别吗?我进行了测试,两个块都可以工作。最佳做法是什么,为什么?
第一块:
function Car(name){
this.Name = name;
}
Car.prototype.Drive = function(){
console.log("My name is " + this.Name + " and I'm driving.");
}
SuperCar.prototype = new Car();
SuperCar.prototype.constructor = SuperCar;
function SuperCar(name){
Car.call(this,name);
}
SuperCar.prototype.Fly = function(){
console.log("My name is " + this.Name + " and I'm flying!");
}
var myCar = new Car("Car");
myCar.Drive();
var mySuperCar = new SuperCar("SuperCar");
mySuperCar.Drive();
mySuperCar.Fly();
第二块:
function Car(name){
this.Name = name;
this.Drive = function(){
console.log("My name is " + this.Name + " and I'm driving.");
}
}
SuperCar.prototype = new Car();
function SuperCar(name){
Car.call(this,name);
this.Fly = function(){
console.log("My name is " + this.Name + " and I'm flying!");
}
}
var myCar = new Car("Car");
myCar.Drive();
var mySuperCar = new SuperCar("SuperCar");
mySuperCar.Drive();
mySuperCar.Fly();
为什么作者添加了usingDrive
和Fly
方法prototype
,而没有声明为类this.Drive
内的方法和类中的方法?Car``this.Fly``SuperCar
为什么SuperCar.prototype.constructor
需要设置回SuperCar
?constructor
设置时属性是否被覆盖prototype
?我注释掉了这一行,没有任何改变。
为什么要调用Car.call(this,name);
构造SuperCar
函数?Car
当我这样做时,属性和方法不会被“继承”
var myCar = new Car("Car");
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。