首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Javascript继承-无法访问方法

JavaScript继承是一种面向对象编程的概念,它允许一个对象(子类)继承另一个对象(父类)的属性和方法。在JavaScript中,继承可以通过原型链和构造函数来实现。

  1. 原型链继承:
    • 概念:原型链继承是通过将子类的原型对象指向父类的实例来实现继承。
    • 分类:属于原型式继承。
    • 优势:简单易用,可以继承父类的属性和方法。
    • 应用场景:适用于单层继承关系,不适用于多层继承关系。
    • 示例代码:function Parent() { this.name = "Parent"; }
代码语言:txt
复制
 Parent.prototype.sayHello = function() {
代码语言:txt
复制
   console.log("Hello, I am " + this.name);
代码语言:txt
复制
 }
代码语言:txt
复制
 function Child() {
代码语言:txt
复制
   this.name = "Child";
代码语言:txt
复制
 }
代码语言:txt
复制
 Child.prototype = new Parent();
代码语言:txt
复制
 var child = new Child();
代码语言:txt
复制
 child.sayHello(); // 输出:Hello, I am Child
代码语言:txt
复制
 ```
  1. 构造函数继承:
    • 概念:构造函数继承是通过在子类的构造函数中调用父类的构造函数来实现继承。
    • 分类:属于经典继承。
    • 优势:可以继承父类的属性,避免了引用类型属性共享的问题。
    • 应用场景:适用于单个子类继承单个父类的情况。
    • 示例代码:function Parent() { this.name = "Parent"; }
代码语言:txt
复制
 Parent.prototype.sayHello = function() {
代码语言:txt
复制
   console.log("Hello, I am " + this.name);
代码语言:txt
复制
 }
代码语言:txt
复制
 function Child() {
代码语言:txt
复制
   Parent.call(this); // 调用父类的构造函数
代码语言:txt
复制
   this.name = "Child";
代码语言:txt
复制
 }
代码语言:txt
复制
 var child = new Child();
代码语言:txt
复制
 child.sayHello(); // 报错:child.sayHello is not a function
代码语言:txt
复制
 ```
  1. 组合继承:
    • 概念:组合继承是将原型链继承和构造函数继承结合起来的一种继承方式。
    • 分类:属于经典继承。
    • 优势:既可以继承父类的属性,又可以继承父类的方法。
    • 应用场景:适用于单个子类继承单个父类的情况。
    • 示例代码:function Parent() { this.name = "Parent"; }
代码语言:txt
复制
 Parent.prototype.sayHello = function() {
代码语言:txt
复制
   console.log("Hello, I am " + this.name);
代码语言:txt
复制
 }
代码语言:txt
复制
 function Child() {
代码语言:txt
复制
   Parent.call(this); // 调用父类的构造函数
代码语言:txt
复制
   this.name = "Child";
代码语言:txt
复制
 }
代码语言:txt
复制
 Child.prototype = new Parent(); // 继承父类的方法
代码语言:txt
复制
 var child = new Child();
代码语言:txt
复制
 child.sayHello(); // 输出:Hello, I am Child
代码语言:txt
复制
 ```
  1. 原型式继承:
    • 概念:原型式继承是通过创建一个临时的构造函数,将父类的实例作为新对象的原型来实现继承。
    • 分类:属于原型式继承。
    • 优势:简单易用,可以继承父类的属性和方法。
    • 应用场景:适用于需要快速创建对象并继承父类的情况。
    • 示例代码:function createObject(obj) { function F() {} F.prototype = obj; return new F(); }
代码语言:txt
复制
 var parent = {
代码语言:txt
复制
   name: "Parent",
代码语言:txt
复制
   sayHello: function() {
代码语言:txt
复制
     console.log("Hello, I am " + this.name);
代码语言:txt
复制
   }
代码语言:txt
复制
 };
代码语言:txt
复制
 var child = createObject(parent);
代码语言:txt
复制
 child.name = "Child";
代码语言:txt
复制
 child.sayHello(); // 输出:Hello, I am Child
代码语言:txt
复制
 ```
  1. 寄生式继承:
    • 概念:寄生式继承是在原型式继承的基础上,增强对象,返回一个新对象。
    • 分类:属于原型式继承。
    • 优势:可以在继承父类的同时,对新对象进行增强。
    • 应用场景:适用于需要在继承父类的基础上进行扩展的情况。
    • 示例代码:function createObject(obj) { var clone = Object.create(obj); clone.sayHello = function() { console.log("Hello, I am " + this.name); }; return clone; }
代码语言:txt
复制
 var parent = {
代码语言:txt
复制
   name: "Parent"
代码语言:txt
复制
 };
代码语言:txt
复制
 var child = createObject(parent);
代码语言:txt
复制
 child.name = "Child";
代码语言:txt
复制
 child.sayHello(); // 输出:Hello, I am Child
代码语言:txt
复制
 ```
  1. 寄生组合式继承:
    • 概念:寄生组合式继承是在组合继承的基础上,通过优化父类的实例创建过程,避免了重复调用父类的构造函数。
    • 分类:属于经典继承。
    • 优势:既可以继承父类的属性,又可以继承父类的方法,避免了重复调用父类的构造函数。
    • 应用场景:适用于单个子类继承单个父类的情况。
    • 示例代码:function Parent() { this.name = "Parent"; }
代码语言:txt
复制
 Parent.prototype.sayHello = function() {
代码语言:txt
复制
   console.log("Hello, I am " + this.name);
代码语言:txt
复制
 }
代码语言:txt
复制
 function Child() {
代码语言:txt
复制
   Parent.call(this); // 调用父类的构造函数
代码语言:txt
复制
   this.name = "Child";
代码语言:txt
复制
 }
代码语言:txt
复制
 // 优化父类的实例创建过程
代码语言:txt
复制
 Child.prototype = Object.create(Parent.prototype);
代码语言:txt
复制
 Child.prototype.constructor = Child;
代码语言:txt
复制
 var child = new Child();
代码语言:txt
复制
 child.sayHello(); // 输出:Hello, I am Child
代码语言:txt
复制
 ```

推荐的腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

共50个视频
web前端-JavaScript入门必备教程-上【动力节点】
动力节点Java培训
视频中讲解了JavaScript核心语法、JavaScript内置支持类、JavaScript调试、JavaScript DOM编程、JavaScript BOM编程、大量前端小案例、JavaScript事件处理、JavaScript对象、继承、JSON等知识点,该视频可以开启您的WEB前端之路。
共3个视频
web前端-JavaScript入门必备教程-下【动力节点】
动力节点Java培训
视频中讲解了JavaScript核心语法、JavaScript内置支持类、JavaScript调试、JavaScript DOM编程、JavaScript BOM编程、大量前端小案例、JavaScript事件处理、JavaScript对象、继承、JSON等知识点,该视频可以开启您的WEB前端之路。
共50个视频
动力节点-Javaweb项目入门到精通【eclipse】-4
动力节点Java培训
本套课程是JavaScript的进阶课程,适用于已经学习了JavaScript基础知识的同学,如果你想继续对JavaScript的面向对象以及高级应用进行深入地学习,那么本套课程就是为你量身定做的,课程将会围绕对象,构造函数以及高级应用三个部分来展开,你将收获到对象的创建、属性的特征、操作原型对象、原型链继承、闭包、深浅拷贝等方面的知识,提高对JavaScript的认知深度。
共11个视频
动力节点-Javaweb项目入门到精通【eclipse】-5
动力节点Java培训
本套课程是JavaScript的进阶课程,适用于已经学习了JavaScript基础知识的同学,如果你想继续对JavaScript的面向对象以及高级应用进行深入地学习,那么本套课程就是为你量身定做的,课程将会围绕对象,构造函数以及高级应用三个部分来展开,你将收获到对象的创建、属性的特征、操作原型对象、原型链继承、闭包、深浅拷贝等方面的知识,提高对JavaScript的认知深度。
领券