JS, как расширить подклассы типизированных массивов ??Как это сделать правильно? - PullRequest
0 голосов
/ 19 сентября 2011

Я пишу библиотеку на CoffeScript (так что JS), и это тяжелая математика .. Мне действительно нужно работать с типизированными массивами (Float64Array) и всей производительностью, которую они предлагают.

Так что же такоелучший способ расширить функциональность типизированного массива ??

В настоящее время я делаю это как функции:

Vector =
    create: (ag...) ->
        CGE2Point.create ag...
    dot: (i,j) ->
        i[0]*j[0] + i[1]*j[1]
    add: (i,j) ->
        @.create i[0]+j[0], i[1]+j[1]
    sub: (i,j) ->
        @.create i[0]-j[0], i[1]-j[1]
    mul: (s,v) ->
        @.create s * v[0], s * v[1]
    div: (s,v) ->
        @.create v[0] / s, v[1] / s

Но было бы очень хорошо иметь объект Vector, который наследуется оттипизированный массивЯ знаю, что подход:

class Vector extends Float64Array

Создать класс, который не обладает всеми преимуществами типизированного массива Вопрос о массиве подклассов , читая следующие статьи Дин Эдвардс предлагает получить копию объекта из iframe, эта другая ссылка делает это другим способом Извините, Дин .Но в типизированном массиве нет всех этих методов.

Итак, как правильно (или, по крайней мере, наиболее элегантно и эффективно) подклассировать типизированные массивы ??Или я должен написать все как функции?

Ответы [ 2 ]

5 голосов
/ 19 сентября 2011

Подклассирование массивов в JavaScript на самом деле невозможно. Кангакс (известной как прототип) написал тщательную разработку о том, как / почему это просто не сработало.

1 голос
/ 19 сентября 2011

Как уже говорили другие: увы, вы не можете создавать подклассы (или типизированные массивы) каким-либо осмысленным образом.Но вы можете создать псевдоним, например,

global.Vector = Float64Array

И вы можете добавить дополнительные методы к прототипу Float64Array, например,

Float64Array::last = -> @[@length - 1]

Это не идеально измодульная точка зрения, но для автономного приложения было бы неплохо добавить синтаксический сахар такого типа.

...