JavaScript не может получить доступ к тому же методу объекта после объекта object.create(baseObject)

Я новичок в javascript. Я написал некоторый код, включив предлагаемые ответы. Теперь блок кода работает один раз и не работает в другом сценарии.

<script langugage="JavaScript">

var baseObject = {
    name:"sunrise",
    age:39,
    printProperties:function(){
        console.log("Base class-> Name:Age:"+this.name+":"+this.age);
    }
}
baseObject.printProperties();
console.log(baseObject); 

/* This code block works fine */

var derivedObject2=Object.create(baseObject);
    derivedObject2.education="M.C.A"
    derivedObject2.printProperties=function(){  
        console.log("Derived -> Name:Age:Education:"+this.name+":"+this.age+":"+this.education);
    }
 derivedObject2.printProperties();
 console.log(derivedObject2);


/*
derivedObject.__proto__ = baseObject;
derivedObject.printProperties(); // Works fine
*/

/* This code block does not work  */

var derivedObject=Object.create(baseObject,{
      education:{value:"MCA"},
      //education:"MCA",
      printProperties:function(){  
        console.log("Derived -> Name:Age:Education:"+this.name+":"+this.age+":"+this.education);
        return this;
      }
});

derivedObject.printProperties(); // Getting error here, 
console.log(derivedObject);


</script>

Вот моя ошибка:

Error:  Uncaught TypeError: derivedObject.printProperties is not a function

Ответ 1

Используйте Object.create()

var baseObject = {
    name:"sunrise",
    age:39,
    printProperties:function(){
        console.log("Name:Age:"+this.name+":"+this.age);
    }
}

затем

var derivedObject=Object.create(baseObject);
    derivedObject.education="M.C.A"
    derivedObject.printProperties=function(){  
 console.log("Name:Age:Education:"+this.name+":"+this.age+":"+this.education);
        }
 derivedObject.printProperties();

теперь производный объект наследует все свойства базового объекта

изменить вы можете сделать это

var derivedObject=Object.create(baseObject,{
              education:{value:"MCA"},
              printprop:function(){}
});

Object.create() абстрагирует большую часть сложности, связанной с прототипами

Ответ 2

prototype - это свойство для функций конструктора в javascript. Но вы пытаетесь реализовать прототип в объекте. Это невозможно.

Пожалуйста, ознакомьтесь с примером реализации концепции прототипа.

function baseObject (){
    this.name = "john";
    this.age = 25;
}
function derivedObject (){
    this.gender = "male";
    this.occupation = "Engineer";
}

derivedObject.prototype = new baseObject();
var d = new derivedObject();
console.log(d.name);
console.log(d.gender);