2

backbone.js について十分な知識があると信じていましたが、理解できない問題があります。

次の 2 つのビューがあるとします。

BaseView = Backbone.View.extend({

    foo: {},

    initialize: function(options) {
        this.render();
    },

    render: function() {
        // ...
    }
});

PageView = BaseView.extend({

    render: function() {
        this.foo.bar = 23;
    }
});

両方のビューで属性 'foo' をチェックすると、明らかに空のオブジェクトになります。

> BaseView.prototype.foo
  Object {}
> PageView.prototype.foo
  Object {}

しかし、PageView インスタンスを作成すると、BaseView の「foo」属性が変更されます。そんなことがあるものか?

> page = new PageView()
> page.foo
  Object {foo: 23}
> BaseView.prototype.foo
  Object {foo: 23}

[編集]

実際、これは一般的な OOP の質問です。パイソンでは:

class A(object):
    foo = {}

class B(A):

    def __init__(self):
        self.foo['bar'] = 23

>>> print A.foo
{}
>>> b = B()
>>> print A.foo
{'bar': 23}
4

1 に答える 1