Объявление функции-прототипа внутри и вне класса? - PullRequest
0 голосов
/ 29 июня 2018
class A {
    foo() {
        console.log("foo");
    }
}

class Mixin {
    insideFunction() {}
}

Mixin.prototype.outsideFunction = function() {};

Object.assign(A.prototype, Mixin.prototype);

let test = new A();

test и A.prototype имеют outsideFunction, но не insideFunction.

В чем разница между объявлением функций внутри и вне класса? Я думал, что это одно и то же, но синтаксически разные.

Кроме того, при использовании console.log(Mixin.prototype) с Google Chrome, outsideFunction имеет более темный цвет текста, чем все остальное, включая insideFunction. Что должно означать?

1 Ответ

0 голосов
/ 29 июня 2018

В чем разница между объявлением функций внутри и вне класса? Я думал, что это одно и то же, но синтаксически разные.

Методы, объявленные в классах ES6, не перечисляются. Это означает, что если вы сделаете:

for(let key in Mixin.prototype) console.log(key)

Вы увидите только outsideFunction, поскольку это обычное перечисляемое свойство. Поскольку Object.assign делает то же самое, вы не можете использовать его для копирования неисчислимых методов.

Для их копирования вы можете использовать getOwnPropertyNames:

function deepAssign(target, ...objs) {
  for(const obj of objs) {
    for(const key of Object.getOwnPropertyNames(obj)) {
      target[key] = obj[key];
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...