Я хочу написать функцию для настройки цепи прототипа, но я хочу, чтобы не использовать __proto__
напрямую или Object.setPrototypeOf
. Это можно сделать? Если нет, то предпочтительнее ли вы от персистентности производительности?Конфигурирование цепочки [[Prototype]] без __proto__
Кроме того, правильно ли это описывать как реализацию mixins?
Это то, что у меня есть (использует __proto__
):
function mix(fn) {
var ancestorFns, curr
if (typeof fn !== 'function') {
throw 'fn must be a function.';
}
ancestorFns = Array.prototype.slice.call(arguments, 1);
curr = fn.prototype;
ancestorFns.forEach(function(ancestorFn) {
if (typeof ancestorFn !== 'function') {
throw 'ancestorFn must be a function.';
}
curr = curr.__proto__ = ancestorFn.prototype;
});
}
Использование:
function Foo() {}
Foo.prototype.a = 'a';
function Bar() {}
Bar.prototype.b = 'b';
function Bam() {}
Bam.prototype.c = 'c';
mix(Foo, Bar, Bam);
console.dir(Foo.prototype); // { a: 'a' }
console.dir(Foo.prototype.__proto__); // { b: 'b' }
console.dir(Foo.prototype.__proto__.__proto__); // { c: 'c' }
Обратите внимание, что 'Object.create (ancestorFn.prototype) .__ proto__ === ancestorFn.prototype'! – Bergi
Просто любопытно: какие проблемы вызывает текущее решение? (обратите внимание, что запрос * другого * решения сейчас ошибочен в соответствии со мной или мета) –
@Begi - Да, понятно, это специально. – Ben