а, не думал, что там про это, тогда вопрос исчерпан ^^'
|
Запилил метод .instsanceOf
a.instanceOf( B );(думаю, можно не описывать, что он делает). Сделал небольшую замену для MyClass.prototype.method.apply( this, arguments ); Она не так хорошо выглядит, как у devote (я так понимаю, ты как-то декорировал методы?), зато реализация выглядит сильно проще. Моего ума пока не хватило сделать нормальный, не зацикливающийся parent (this.parent.method()).
A = Class({
method: function() {}
});
B = Class({
method: function() {
B.parent.method( this );
}
});
Чтобы вызвать метод родительского класса пишем имя текущего класса (указывать в методах название родительского класса — совсем некрасиво, но своего — уже лучше), свойство parent, имя метода, аргументы: 1. this - обязательно 2. arguments или любые аргументы Можно написать так: B.parent.method( this, arguments ); а можно и так: B.parent.method( this, 1, 2, 3, 4, 5 ); |
Цитата:
console.log = function() {}; x = {}; console.time( '1' ); for( var i = 0; i < 100000; i++ ) x[ i ] = new C; console.timeEnd( '1' )
Миллион инстанцов сожрали около гига, сто тысяч сожрали, ожидаемо, 100 мегабайт. Не знаю, хорошо это или плохо, но совет очевиден: не создавайте больше 100 тысяч инстанцов, 100 мегабайт для осла не так уж и много :) |
Цитата:
|
FINoM, ну, лучше уж только перечисляться, чем еще и что-то возвращать
как тебе такой вариант?
var B= Class(function( proto ){
proto.define( 'foo', function( ){ return 1 } )
proto.override( 'bar', function( return 2 } )
})
define - создаёт свойство, но бросает исключение, если такое уже есть override - перегружает свойство предка, но бросает исключение, если такого нет ну и расширять тут можно: defineGetter, overrideGetter defineSetter, overrideSetter и так далее |
Цитата:
MainClass = Class({
define: function() {/* ... */},
override: function() {/* ... */}
/* ... */
});
A = Class({
'extends': MainClass
/* ... */
});
То же самое касается и этого: Цитата:
MainClass = Class({
initMainClass: function() {
// можно перечислить все семь свойств и вернуть в геттере undefined,
// а можно и перечислить всего три (которые не null) и вернуть null
var badProps = [ 'contentType', 'timeout', 'responseText' ];
for(var i = 0; i < badProps.length; i++ ) {
Object.defineProperty( this, badProps[ i ], { get: function() { return null; }});
}
}
})
|
не, ты не понял, у меня эти методы расширяют прототип, а не экземпляр
а пример, не о том, вот правильный:
var A= Class(function( proto ){
proto.define( 'foo', function( ){ return 1 } )
})
var B= Class(function( proto ){
proto.mixin( A )
proto.override( 'foo', function( base, 1 ){
return base() + 1
} )
})
|
Цитата:
|
вот это:
proto.override( 'foo', function( base, 1 ){
return base() + 1
} )
перегруженный метод передаётся в качестве первого параметра |
Цитата:
|
| Часовой пояс GMT +3, время: 18:44. |