js实现继承的方法
在 JavaScript 中,实现继承的方法有三种:原型链继承、构造函数继承和组合继承。
1. 原型链继承
原型链继承是最基本的实现继承的方式。它通过将父类的实例作为子类的原型,从而实现子类继承父类的属性和方法。
实现代码如下:
```
function Parent() {
this.name = '张三';
}
Name = function() {
return this.name;
}
function Child() {}
Child.prototype = new Parent();
var child = new Child();
console.Name()); // 输出:张三
```
这种方式存在一个问题,就是所有子类实例都会共用一个父类实例。如果一个子类实例修改父类的属性或方法,那么所有子类实例都会受到影响。
2. 构造函数继承
构造函数继承是通过在子类构造函数内部调用父类构造函数的方式,来实现子类继承父类的
属性和方法。
实现代码如下:
```
function Parent() {
this.name = '张三';
}
Name = function() {
return this.name;
}
function Child() {
Parent.call(this);
}
var child = new Child();
console.Name()); // 输出:undefined
```
这种方式解决了原型链继承存在的问题,但是它也存在一个问题,就是父类原型上的方法无法被子类继承。因为子类的原型是空对象,而不是父类的原型。
3. 组合继承
组合继承是将原型链继承和构造函数继承结合起来的方式,从而既能够继承父类的属性和方法,又能够继承父类原型上的方法。
实现代码如下:
```
function Parent() {
this.name = '张三';
}
Name = function() {
return this.name;
js原型和原型链的理解}
function Child() {
Parent.call(this);
}
Child.prototype = new Parent();
structor = Child;
var child = new Child();
console.Name()); // 输出:张三
```
这种方式既能够继承父类的属性和方法,又能够继承父类原型上的方法。但是,它也存在一个问题,就是每次创建子类实例都会调用一次父类构造函数,导致父类属性被重复定义。因此,组合继承优化的方式是使用寄生组合继承。
4. 寄生组合继承
寄生组合继承是寄生式继承和组合继承结合起来的方式,既能够继承父类原型上的方法,又能够避免在每个子类实例上重复定义父类属性。
实现代码如下:
```
function Parent() {
this.name = '张三';
}
Name = function() {
return this.name;
}
function Child() {
Parent.call(this);
}
Child.prototype = ate(Parent.prototype);
structor = Child;
var child = new Child();
console.Name()); // 输出:张三
```
通过使用 ate() 方法,将父类原型作为子类原型的原型,从而避免了在每个子类实例上重复定义父类属性。而 structor = Child 这一行代码则是为了修复子类原型的 constructor 指向错误的问题。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论