наследование ...
Приветствую всех.
Мучает вопрос по наследованию на прототипах. Допустим есть такой код function Parent() { this.parentProperty = "value", this.parentMethod = function() { alert(this.parentProperty); } } function Child() {} var parentObject = new Parent(); Child.prototype = parentObject; var childObject = new Child(); childObject.parentMethod(); // valueздесь все работает и алертиться свойство родительского объекта и есть такой код ... var parentObject = { parentProperty: "value", parentMethod: function() { alert(this.parentProperty); } }; var childObject = {}; childObject.prototype = parentObject; childObject.parentMethod(); // Uncaught TypeError: Object #<Object> has no method 'parentMethod' но почему childObject не имеет метода parentMethod() ??? ведь если рассуждать по логике, то создание объекта с синтаксисом var obj = {}; подразумевает под собой неявное создание объекта встроенным конструктором Object() (тоесть так: var obj = new Object()) - в таком случае этот prototype должен работать точно так же как и в первом случае, когда мы явно создаем объект с помощью конструкора. Но выдается ошибка, почему ??? |
Цитата:
|
BallsShaped,
как еще рассуждать если не по логике ? у меня вопрос возник как раз после прочтения этого раздела - вы мне предлагаете заново все перечитать потратив еще пару дней чтобы понять ? ... вроде проблему объяснил нормально, да и тема довольно интересна - форум для чего тогда |
Цитата:
var parentObject = { parentProperty: "value", parentMethod: function() { alert(this.parentProperty); } }; // аналогично Child.prototype Object.prototype = parentObject; // Аналогично var childObject = new Child(); var childObject = {}; childObject.parentMethod(); Но он не будет работать, так как прототипы встроенных объектов можно расширять, но нельзя заменять (это моя догадка, подкрепленная поведением js-движка V8) |
Цитата:
написал функцию взяв за основу именно расширение. function getParent(childObj, parentObj) { Object.prototype.extending = parentObj; childObj = childObj.extending; return childObj; } var parentObject = { parentProperty: "value", parentMethod: function() { alert(this.parentProperty); } }; var childObject = {}; childObject = getParent(childObject, parentObject); childObject.parentMethod(); // value} |
Цитата:
|
И, кстати, очень полезный совет: забудь про alert, используй console.log и браузер chrome. Там все очень наглядно и, пожалуй, можно даже методом тыка много полезного узнать.
|
Цитата:
|
Цитата:
|
Дзен-трансгуманист,
ксати Object.create() помог, за что спасибо |
Часовой пояс GMT +3, время: 05:44. |