Так как определен Object
конструктор . Если аргумент, который вы передаете, является объектом, он просто возвращает этот объект вместо нового. (Теоретически, новый объект был создан new
, но затем выброшен, на практике он может быть оптимизирован прочь & nbsp; & mdash; см. Ниже «Примечание».)
Логика в конструкторе Object
, игнорируя незначительную деталь, является: Если аргумент не указан или аргумент null
или undefined
, создайте и верните новый объект; в противном случае возвращаем результат преобразования аргумента в объект. Поскольку аргумент, который вы передаете, уже является объектом, это преобразование не должно ничего делать.
Просто для полноты: конструкторы вообще могут сделать new
возвращать существующий объект вместо нового один, возвращая объект не null
. (Если конструктор не возвращает ничего нормального case & nbsp; & mdash; или возвращает значение, отличное от объекта, как 42, возвращается объект, созданный с помощью new
.) Вот пример:
"use strict";
class Example1 {
constructor(arg) {
if (arg && typeof arg === "object") {
return arg;
}
}
}
const a = {};
const e1 = new Example1(a);
console.log(a === e1); // true
class Example2 {
constructor(arg) {
if (arg && typeof arg === "object") {
return arg;
}
return 42; // 42 isn't an object
}
}
const e2 = new Example2();
console.log(e2); // [object Object], not 42
Примечание: теоретически использование new
всегда создает новый объект, а затем, если конструктор возвращает другой объект, новый объект просто получает выброшенный. На практике механизмы JavaScript могут оптимизировать создание этого нового объекта, если конструктор не имеет доступа к this
.
Примечание 2: Возможно, стоит отметить, что использование new
с Object
конструктор никогда не нужен. Object
- это бит нечетного конструктора. Как определено спецификацией, он игнорирует объект new
. new Object()
и Object()
делают то же самое, что и new Object(value)
и Object(value)
. Опять же, это необычно.
Я сделал эту работу.
Здесь есть запрос на получение доступа к musta_matchers:
https://github.com/thoughtbot/shoulda-matchers/pull/1169
Пока команда shoulda_matchers не объединит его, используйте мою версию здесь:
https://github.com/morsedigital/shoulda-matchers
В вашем Gemfile:
[112 ]Оказывается, это ошибка в матчах с горчицей.