Проблема в том, что это копирование, а не наследование. Это разные вещи. Если в Apple.prototype и Product.prototype будут одноименные методы, копирование перезапишет метод ребенка методом предка, наследование - нет. Наследование реализуется так:
function extend(Child, Parent) {
Child.prototype = Object.create(Parent.prototype, {
constructor: {
value: Child,
enumerable: false,
writable: true,
configurable: true
}
});
};
То есть, в итоге должно получиться, что (new Child()).__proto__.__proto__ == (new Parent()).__proto__