Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
некая инициативная группа в составе гугла просто не понимает прототипную парадигму и стремится навязать взамен классовую
не надо без нужды увеличивать энтропию
var Foo = new Constructor( Bar, {
constructor: function () {
Bar.call( this );
},
fooMethod: function () {
Bar.prototype.barMethod.call( this );
}
});
this.barMethod — естественно.Foo.superclass.barMethod.call(this); не очень работает при использовании mixin.
>>> def p(s): print s
>>> def aop(pre_f, post_f):
def decorate(f):
def decorated(*args):
pre_f(*args)
f(*args)
post_f(*args)
return decorated
return decorate
>>> @aop(lambda : p('before'), lambda : p('after'))
def f():
print 'f'
>>> f()
before
f
after
>>> def print_field(self, msg):
print msg, self.field
>>> class A:
@aop(lambda self: print_field(self,'Field before method:'), lambda self: print_field(self, 'Field after method:'))
def method(self):
self.field+=2
>>> a = A()
>>> a.field = 5
>>> a.method()
Field before method: 5
Field after method: 7
>>> class A:
def method(self):
self.field+=2
>>> a = A()
>>> a.field = 5
>>> a.method()
>>> def p(s): print s
>>> def aop(pre_f, post_f):
def decorate(f):
def decorated(*args):
pre_f(*args)
f(*args)
post_f(*args)
return decorated
return decorate
>>> def print_field(self, msg):
print msg, self.field
>>> A.method = aop(lambda self: print_field(self,'Field before method:'), lambda self: print_field(self, 'Field after method:'))(A.method)
>>> a.method()
Field before method: 7
Field after method: 9
object.ancestor(name, level) - //указать имя метода/свойства и уровень углубления 
Javascript наследование для чайников