【问题标题】:How function can inherit a class attributes and methods in Javascript函数如何继承Javascript中的类属性和方法
【发布时间】:2019-09-13 04:28:01
【问题描述】:

在 javascript 中,我有一个类和一个函数,我希望该函数继承类属性和方法。

据我所知,当一个函数继承另一个函数时,我们可以使用call()apply(),但是如果一个函数继承了一个类呢?

 class User{

    constructor(email_,name_){
        this.name=name_;
        this.email=email_;
    }

    login(){
        console.log(this.email+" has login");
    }
}


function Admin  (...args){

    User.apply(this,args);

}

var user1=new User("akrem","akrem@gmx.us");
var user2=new User("Luis","Luism@gmx.us");
var user3=new User("Karim","Karim@gmx.us");
var user4=new User("Yassine","assine@gmx.us");


var admin1=new Admin("Alex","alex@gmx.us");

console.group(admin1); //this gives error

【问题讨论】:

标签: javascript function class object ecmascript-6


【解决方案1】:

你做错了 - 要创建一个子类,请使用 extendssuper

class User {

  constructor(email_, name_) {
    this.name = name_;
    this.email = email_;
  }

  login() {
    console.log(this.email + " has login");
  }
}


class Admin extends User {
  constructor(name, email) {
    super(email, name);
  }
  login() {
    console.log(this.name + " is an admin and has logged in.");
  }
}

var user1 = new User("akrem", "akrem@gmx.us");
var user2 = new User("Luis", "Luism@gmx.us");
var user3 = new User("Karim", "Karim@gmx.us");
var user4 = new User("Yassine", "assine@gmx.us");


var admin1 = new Admin("Alex", "alex@gmx.us");

console.log(admin1);

admin1.login();

如果你真的想使用扩展和函数,请同时制作UserAdmin ES5 构造函数,并通过原型设计附加方法:

function User(email_, name_) {
  this.name = name_;
  this.email = email_;
}

User.prototype.login = function() {
  console.log(this.email + " has login");
}

function Admin(...args) {
  User.apply(this, args);
}

Admin.prototype.login = function() {
  console.log(this.name + " is an admin and has logged in.");
}

var user1 = new User("akrem", "akrem@gmx.us");
var user2 = new User("Luis", "Luism@gmx.us");
var user3 = new User("Karim", "Karim@gmx.us");
var user4 = new User("Yassine", "assine@gmx.us");


var admin1 = new Admin("alex@gmx.us", "Alex");

console.log(admin1);

admin1.login();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-26
    • 2015-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多