ru.javascript.info icon indicating copy to clipboard operation
ru.javascript.info copied to clipboard

Альтернативное задание прототипа в главе "Примеси"

Open mkbaranovskyi opened this issue 6 years ago • 0 comments

Здравствуйте! В главе "Примеси" https://learn.javascript.ru/mixins в третьем сверху блоке кода в комментарии написано, что "или мы можем использовать Object.create для задания прототипа". Хотелось бы увидеть, как это возможно реализовать, для начинающих это совсем не очевидно. Сколько я ни пытался, мне это не удалось сделать. Попытка создать примесь с прототипом с помощью Object.create выбрасывает в конечном итоге (при дальнейшем вызове new User().sayHi() ) ошибку TypeError: (intermediate value).say is not a function. Вот такое решение я пробовал:

let sayHiMixin = {
	sayHi() {
		super.say(`Hi, my name is ${this.name}`)	
	},
	sayBye() {
		super.say(`Bye, ${this.name}`)
	}
}

sayHiMixin = Object.create(sayMixin, Object.getOwnPropertyDescriptors(sayHiMixin))

Также игрался с разными вариантами "создать пустой объект с прототипом, потом добавить в него свойства" - это все тоже не работает. Возможно, потому, что создаются именно свойства-функции, а не методы (в учебнике есть об этом упоминание)? А как же тогда решить с помощью Object.create?

P.S. Стабильно работает решение с прямым указанием прототипа для sayHiMixin через __proto__ и Object.setPrototypeOf()

mkbaranovskyi avatar Dec 02 '19 00:12 mkbaranovskyi