当前位置: 首页 > news >正文

mvc5网站开发之美wordpress 教 模版

mvc5网站开发之美,wordpress 教 模版,企业网站建设有名 乐云seo,seo网站建站公司的主页Question JavaScript实现继承的方式? 包含原型链继承、构造函数继承、组合继承、原型式继承、寄生式继承、寄生组合式继承和ES6 类继承 JavaScript实现继承的方式 在JavaScript中,实现继承的方式多种多样,每种方式都有其优势和适用场景。以下…

Question JavaScript实现继承的方式?

包含原型链继承、构造函数继承、组合继承、原型式继承、寄生式继承、寄生组合式继承和ES6 类继承

JavaScript实现继承的方式

在JavaScript中,实现继承的方式多种多样,每种方式都有其优势和适用场景。以下是一些常见的继承方式:

1. 原型链继承

原型链继承是通过将子类的原型设置为父类的实例来实现继承。这样,子类就可以访问父类原型上的属性和方法。

function Parent({
  this.name = 'Parent';
}

function Child({}

Child.prototype = new Parent();

const childInstance = new Child();
console.log(childInstance.name); // 输出 'Parent'

优势: 简单易懂。

缺点: 引用类型的属性会被所有实例共享,无法传递参数给父类构造函数。

2. 构造函数继承

构造函数继承通过在子类构造函数中调用父类构造函数来实现继承。

function Parent(name{
  this.name = name || 'Parent';
}

function Child(name{
  Parent.call(this, name);
}

const childInstance = new Child('Child');
console.log(childInstance.name); // 输出 'Child'

优势: 解决了原型链继承中引用类型属性共享的问题。

缺点: 方法都在构造函数中定义,无法实现函数复用。

3. 组合继承

组合继承结合了原型链继承和构造函数继承,通过调用父类构造函数设置实例属性,再通过将父类实例作为子类原型来实现。

function Parent(name{
  this.name = name || 'Parent';
}

function Child(name{
  Parent.call(this, name);
}

Child.prototype = new Parent();

const childInstance = new Child('Child');
console.log(childInstance.name); // 输出 'Child'

优势: 同时继承实例属性和方法。

缺点: 调用了两次父类构造函数,存在一定的性能问题。

4. 原型式继承

原型式继承通过创建一个空对象,然后将该对象作为参数传递给一个函数,该函数的原型被赋值为这个对象,从而实现继承。

function createObject(obj{
  function F({}
  F.prototype = obj;
  return new F();
}

const parent = {
  name'Parent'
};

const child = createObject(parent);
console.log(child.name); // 输出 'Parent'

优势: 简单灵活。

缺点: 属性共享问题,引用类型属性会被所有实例共享。

5. 寄生式继承

寄生式继承在原型式继承的基础上,增加了对父类构造函数的调用,从而可以传递参数给父类构造函数。

function createObject(obj{
  const clone = Object.create(obj);
  clone.sayHello = function({
    console.log('Hello!');
  };
  return clone;
}

const parent = {
  name'Parent'
};

const child = createObject(parent);
console.log(child.name); // 输出 'Parent'
child.sayHello(); // 输出 'Hello!'

优势: 可以在对象上添加新的方法。

缺点: 仍然存在属性共享问题。

6. 寄生组合式继承

寄生组合式继承是为了解决组合继承中调用两次父类构造函数的性能问题,通过使用 Object.create 创建父类原型的副本,然后将该副本赋值给子类原型。

function inheritPrototype(child, parent{
  const prototype = Object.create(parent.prototype);
  prototype.constructor = child;
  child.prototype = prototype;
}

function Parent(name{
  this.name = name || 'Parent';
}

function Child(name{
  Parent.call(this, name);
}

inheritPrototype(Child, Parent);

const childInstance = new Child('Child');
console.log(childInstance.name); // 输出 'Child'

优势: 解决了组合继承的性能问题,同时保持了原型链继承的优点。

缺点: 略显繁琐。

7. ES6 类继承

ES6 引入了 class 关键字,使得面向对象编程更加直观。通过 extends 关键字可以实现类的继承。

class Parent {
  constructor(name) {
    this.name = name || 'Parent';
  }
}

class Child extends Parent {
  constructor(name) {
    super(name);
  }
}

const childInstance = new Child('Child');
console.log(childInstance.name); // 输出 'Child'

优势: 语法更加简洁,易读易写。

缺点: 底层仍然是基于原型链的继承。

100+小程序源码关注公众号回复 5 获取(不想看激励视频的可私信)

alt

本文由 mdnice 多平台发布

http://www.yayakq.cn/news/696884/

相关文章:

  • 网站建设费用入账做网站用
  • 网站注册备案查询高清的广州网站建设
  • html5网站建设思路江浦做网站
  • 万网网站建设的子分类能显示多少个哪些网站做推广
  • 微信小程序网站建设方案外发加工网app
  • 口碑好网站建设哪家好衡水专业做网站
  • 上海网站建设沪icp备响应式网站的几种尺寸
  • 域名和网站的关系简单漂亮中英文企业网站系统
  • 重庆专业的网站建设公司排名有什么做照片书的网站
  • 2018江苏省海门市建设局网站电商网站开发书籍
  • 做兼职那个网站比较好浙江大学教室办事大厅网站建设
  • 张家港外贸网站建设旅游网站首页设计
  • 做网站的工资高吗?acaa平面设计师证书报名费
  • 做文学网站需要网站加栏目
  • 网站建设公司权威排名本网站建设
  • 网上商城网站开发需求说明书有个电商网站模板
  • 域名注册没有网站百度网盟如何选择网站
  • 成都建设局网站首页wordpress安装2个网站
  • 深圳公司网站建设案例百度区域代理
  • 阿里云做网站麻烦吗wordpress 插件 升级
  • 婚庆公司网站制作可以直接进入的网站正能量大豆网
  • 学校网站建设方案宁德网页设计
  • 阳江网站设计网站上传视频教程
  • 六年级做的网站的软件下载晋州住房保障建设局网站
  • 找做防水去那个网站公建一般多少钱
  • 自适应网站平台常德软件开发
  • 网站优化效果查询网页设计怎么做流动图片
  • dw怎么做音乐网站北京广告
  • 网站标题算关键词优化吗外包加工网是正规的吗
  • 网站推广注意事项500个公司取名大全