Object.create() циклическая ссылка
Здравствуйте.
Есть объект: App = { foo : function() { //... } } Создаю свойство App.Section, которое является объектом, прототипом которого является App (родительский объект) App.Section = Object.create( App ); // далее создаю методы объекта App.Section App.Section.boo = function() { // ... } // и т.д Когда смотрю в firebug получается бесконечно раскрывающееся дерево: App.Section -- App.Section.Section -- App.Section.Section.Section и т.д. Т.е. Section раскрывается до бесконечности, ибо он яляется свойством App и пронаследован от App. Нормально ли такое поведение? Цель была, чтобы в this в App.Section был App, а не только App.Section без доступа к методам App через this. |
разница между твоим кодом и моим только в том что ты перезаписываешь скрытое свойство __proto__
(Object.create); var app = { method: function () {return this.age}, } app.Section = {App: app} можно делать так var app = { method: function () { return this.age }, } var obj = Object.create(app); obj.age = 22; console.log(obj) |
Цитата:
|
Цитата:
|
кстати, даже в нэйтив подобные вещи есть
alert(window == window.window) |
var app = { method: function () {} } app.obj = {}; app.obj.__proto__ = app; // это тоже самое что Object.create(app); console.log(app) |
ага
var app = {} app.__proto__ = Object.prototype // это тоже самое что var app = {} или app = Object.create(Object.prototype); Если так рассуждать, мы постояннно только и делаем что перезаписываем разные всякие прото. |
Цитата:
'use strict'; class Section { constructor(app) { this.app = app; } test(x) { this.app.test(x); } }; class App { constructor() { this.section = new Section(this); } test(x) { alert(x); } static isApp(any) { return any instanceof App; } }; let app = new App(); alert(App.isApp(app)); alert(App.isApp(app.section.app)); app.test(1); app.section.test(2); |
Часовой пояс GMT +3, время: 20:26. |