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, время: 21:05. |