Как функция может наследовать атрибуты класса и методы в Javascript - PullRequest
0 голосов
/ 24 апреля 2019

В 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

1 Ответ

1 голос
/ 24 апреля 2019

Вы делаете это неправильно - чтобы создать подкласс, используйте extends и super:

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();

Если вы действительно хотите использовать расширение и функции, создайте и конструкторы User, и Admin 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...