js实现继承的方法

  • 格式:docx
  • 大小:36.94 KB
  • 文档页数:6

js实现继承的方法

在 JavaScript 中,实现继承的方法有三种:原型链继承、构造函数继承和组合继承。

1. 原型链继承

原型链继承是最基本的实现继承的方式。它通过将父类的实例作为子类的原型,从而实现子类继承父类的属性和方法。

实现代码如下:

```

function Parent() {

= '张三';

}

Parent.prototype.getName = function() {

return ;

}

function Child() {}

Child.prototype = new Parent();

var child = new Child();

console.log(child.getName()); // 输出:张三

```

这种方式存在一个问题,就是所有子类实例都会共用一个父类实例。如果一个子类实例修改父类的属性或方法,那么所有子类实例都会受到影响。

2. 构造函数继承

构造函数继承是通过在子类构造函数内部调用父类构造函数的方式,来实现子类继承父类的属性和方法。

实现代码如下:

```

function Parent() {

= '张三';

}

Parent.prototype.getName = function() {

return ;

}

function Child() {

Parent.call(this);

}

var child = new Child();

console.log(child.getName()); // 输出:undefined

```

这种方式解决了原型链继承存在的问题,但是它也存在一个问题,就是父类原型上的方法无法被子类继承。因为子类的原型是空对象,而不是父类的原型。

3. 组合继承

组合继承是将原型链继承和构造函数继承结合起来的方式,从而既能够继承父类的属性和方法,又能够继承父类原型上的方法。

实现代码如下:

```

function Parent() {

= '张三'; }

Parent.prototype.getName = function() {

return ;

}

function Child() {

Parent.call(this);

}

Child.prototype = new Parent();

Child.prototype.constructor = Child;

var child = new Child();

console.log(child.getName()); // 输出:张三

```

这种方式既能够继承父类的属性和方法,又能够继承父类原型上的方法。但是,它也存在一个问题,就是每次创建子类实例都会调用一次父类构造函数,导致父类属性被重复定义。因此,组合继承优化的方式是使用寄生组合继承。

4. 寄生组合继承

寄生组合继承是寄生式继承和组合继承结合起来的方式,既能够继承父类原型上的方法,又能够避免在每个子类实例上重复定义父类属性。

实现代码如下:

```

function Parent() {

= '张三';

}

Parent.prototype.getName = function() {

return ;

}

function Child() {

Parent.call(this);

}

Child.prototype = Object.create(Parent.prototype);

Child.prototype.constructor = Child;

var child = new Child();

console.log(child.getName()); // 输出:张三

```

通过使用 Object.create() 方法,将父类原型作为子类原型的原型,从而避免了在每个子类实例上重复定义父类属性。而

Child.prototype.constructor = Child 这一行代码则是为了修复子类原型的 constructor 指向错误的问题。

总的来说,JavaScript 实现继承的方法有原型链继承、构造函数继承、组合继承和寄生组合继承这四种方式。开发者可以根据自己的实际需求来选择最合适的实现方式。