Из документов MDN для стандартной setPrototypeOf
функции, а также нестандартного __proto__
свойства:
Мутация [[Prototype]] объекта, независимо от того, как это выполняется, сильно обескуражена, потому что она очень медленная и неизбежно замедляет последующее выполнение в современных реализациях JavaScript.
Использование Function.prototype
для добавления свойств - это способ добавления функций-членов в классы javascript. Затем, как показано ниже:
function Foo(){}
function bar(){}
var foo = new Foo();
// This is bad:
//foo.__proto__.bar = bar;
// But this is okay
Foo.prototype.bar = bar;
// Both cause this to be true:
console.log(foo.__proto__.bar == bar); // true
Почему foo.__proto__.bar = bar;
плохо? Если его плохое не Foo.prototype.bar = bar;
так же плохо?
Тогда почему это предупреждение: оно очень медленно и неизбежно замедляет последующее выполнение в современных реализациях JavaScript. Конечно, Foo.prototype.bar = bar;
не так уж плохо.
Обновление Возможно, благодаря мутации они означали переназначение. См. Принятый ответ.