Как сделать возврат пустого объекта при вызове с аргументом null?
Всем здравствуйте, надо было создать аналог функции Object.create.
Написал, на что мозгов хватило, сейчас никак не могу додуматься, как исправить единственную ошибку в тесте: "должен возвращать пустой объект при вызове с аргументом null".
Object.create = function(proto, propertiesObject) {
let result = {};
if (proto !== Object(proto) && proto !== null) {
throw new TypeError('');
}
if (proto === null) {
return result;
}
result = Object.setPrototypeOf({}, proto);
if (propertiesObject !== undefined) {
Object.defineProperties(result, propertiesObject);
}
return result;
};
Пример:
const A = {
objectName: 'Object A',
getObjectName: function() {
return `This is ${this.objectName}!`;
},
};
const B = Object.create(A, {
objectName: {
value: 'Object B',
},
});
A.getObjectName(); // This is Object A!
B.getObjectName(); // This is Object B!
A.hasOwnProperty('getObjectName'); // true
A.hasOwnProperty('objectName'); // true
B.hasOwnProperty('getObjectName'); // false
B.hasOwnProperty('objectName'); // true
Сейчас тест дает:
● object-create › должен возвращать пустой объект при вызове с аргументом null
expect(received).toBeNull()
Received: {}
25 | const obj = Object.create(null);
26 | expect(obj).toEqual({});
> 27 | expect(Object.getPrototypeOf(obj)).toBeNull();
| ^
28 | });
29 |
30 | it('аргумент `prototype` отрабатывает должным образом', () => {
at Object.toBeNull test.js:27:40)
Ответы (1 шт):
Автор решения: anami
→ Ссылка
Решил так:
Object.create = function(proto, propertiesObject) {
let result = {};
let empty = {};
empty.__proto__ = null;
if (proto !== Object(proto) && proto !== null) {
throw new TypeError('');
}
if (proto == null) {
return empty;
}
result = Object.setPrototypeOf({}, proto);
if (propertiesObject !== undefined) {
Object.defineProperties(result, propertiesObject);
}
return result;
};