Не пойму кусок кода из статьи про примеси(mixin),там где "примешивают" замыкания. Конкретно в строках 1 и 2 не понятно что происходит?Ссылка на статью https://habr.com/post/132340/
function extend_2(object)
{
var mixins = Array.prototype.slice.call(arguments, 1);
for (var i = 0; i < mixins.length; ++i)
{
for (var prop in mixins[i])
{
if (typeof object.prototype[prop] === "undefined")
{
bindMethod = function (mixin, prop) //(1)
{
return function () { mixin[prop].apply(this, arguments) }
}
object.prototype[prop] = bindMethod(mixins[i], prop);//(2)
}
}
}
}
В указанных строках
bindMethod = function (mixin, prop) //(1)
{
return function () { mixin[prop].apply(this, arguments) }
}
object.prototype[prop] = bindMethod(mixins[i], prop);//(2)
Происходит следующее:
создается функция, которая
this
и arguments
.вызывается созданная функция, и результат записывается в переменную.
Если не обращать внимания, что bindMethod
утекает в глобальную область видимости, можно сказать, что эта функция вообще не нужна, так как кроме создания еще одной функции ничего не делает.
Поэтому указанный код можно заменить на следующий:
object.prototype[prop] = mixins[i][prop];
Если прочитать исходную статью можно отметить, что данная функция была введена для того, чтобы была возможность подменить саму функцию mixin
, после того, как она уже была куда-то примешена.
Пример:
function extend_2(construct, ...mixins) {
mixins.forEach(mixin => {
for (var prop in mixin) {
if (typeof construct.prototype[prop] === "undefined") {
var bindMethod = function(mixin, prop) //(1)
{
return function() {
mixin[prop].apply(this, arguments)
}
}
construct.prototype[prop] = bindMethod(mixin, prop); //(2)
}
}
});
}
var mixins = {
say: function() {
console.log('base say')
}
}
function A() {}
extend_2(A, mixins);
var a = new A();
a.say();
mixins.say = function() {
console.log('new say')
}
a.say();
Виртуальный выделенный сервер (VDS) становится отличным выбором
Сделал отдельным файлом конструктор класса с методами, его импортирую в компонент VueКак можно вызвать метод компонента Vue из класса, созданного...
Не работает axios пишет ошибку Cannot read property 'post' of undefined вот пример кода
Нужно выполнить данную функцию если у блока ("cart") будет класс ("cart-active")
Есть скрытый блок iframe, который находится в bodyНа сайте есть проекты, у которых есть ссылка перехода на карточку проекта