首页
学习
活动
专区
工具
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
复制
 ```

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

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

相关·内容

没有搜到相关的沙龙

领券