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);