Наследование базового наследования Javascript и Crockford на основе прототипа

У меня есть путаница с рекомендованным Crockford наследованием, каково основное различие между методом Крокфорда и родовым (по умолчанию) способом.

//Crockford method
      function object(o) {
            function F() {}
            F.prototype = o;
            return new F();
        }

Ниже приведен более общий способ

function Base(name) {
    this.name = name;
}

Base.prototype.getName = function () {
    return 'Base :' + this.name;
}

function Child(name) {
    this.name = name;
}

Child.prototype.getName = function () {
    return 'Child :' + this.name;
}

function Kid(name) {
    this.name = name;
}

Kid.prototype.getName = function () {
    return 'Kid :' + this.name;
}

Child.prototype = new Base ("childBase");
Kid.prototype = new Child ("kidChild");

var base = new Base ("myBase");
var child = new Child("myChild");
var kid = new Kid("myKid");

console.log(base.getName());
console.log(child.getName());
console.log(kid.getName());

В чем разница между двумя вышеуказанными?

На самом деле я не могу полностью понять метод Крокфорда. Может ли кто-нибудь помочь мне разобраться в недостатках в общем виде и преимуществах метода Крокфорда.

Ответ 1

Child.prototype = new Base ("childBase");
Kid.prototype = new Child ("K1", "K2");

с этими строками вы создаете два объекта, у которых есть даже собственные имена. Для чего это полезно? В более сложных средах это потенциально даже разрушает приложение - когда конструктор Base использует частные переменные и привилегированные методы, все его дочерние элементы будут использовать одни и те же переменные в одном экземпляре!

Поэтому обычно не следует использовать этот способ, но функция Crockfords, более старая версия Object.create. Он будет вызван с помощью Base.prototype, создаст новый объект, который наследует непосредственно от этого, - он устанавливает цепочку прототипов, но не выполняет никакого кода конструктора. Понимание шапки обложки Object.create от Crockford поможет вам в деталях. Созданный объект тогда идеально подходит для прототипа объекта для детей. Также прочитайте этот ответ.