Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
.prototype — будет применяться к экземплярам класса. Если вы про то, чтобы сделать промежуточный класс для создания класса потомка с нужным прототипом, то тоже загвоздка тут. Чтобы этот прототип применился, нужно вызвать new. При этом JS создает объект с таким прототипом, а нужна функция. Все равно придется использовать __proto__.describe 'coffee_classkit', ->
describe '#extendsWithProto', ->
beforeEach ->
class @A
@x = -> true
class @B extends @A
classkit.extendsWithProto @
it 'keeps child`s own properties clean', ->
assert.deepEqual Object.keys(@A), ['x']
assert.deepEqual Object.keys(@B), ['__super__']
assert.equal @A.x(), true
assert.equal @B.x(), true
A = function(){
this.aa = 'aaAProp';
};
A.prototype = {
bb: 'bbAproto'
};
a = new A();
a.constructor.prototype.bb = 'a-changeProto';
alert(a.constructor.prototype.bb) //a-changeProto - прототип (неизвестно чего) запоминается
alert(a.bb) //bbAproto - но не распространяется
A.prototype.bb = 'new-bbAproto';
alert(a.bb) //new-bbAproto
CoffeeScript принёс в JS неплохую абстракцию классов, основанную на прототипах.
Улучшенное наследование в CoffeeScript