Опытный метод расширения JavaScript

Проверьте, ли векторное произведение b-a и c-a 0: это означает, что все точки коллинеарны. Если они, проверьте, ли c координаты между a и b. Используйте или x или координаты y, целых a и b являются отдельными на той оси (или они - то же на обоих).

def is_on(a, b, c):
    "Return true iff point c intersects the line segment from a to b."
    # (or the degenerate case that all 3 points are coincident)
    return (collinear(a, b, c)
            and (within(a.x, c.x, b.x) if a.x != b.x else 
                 within(a.y, c.y, b.y)))

def collinear(a, b, c):
    "Return true iff a, b, and c all lie on the same line."
    return (b.x - a.x) * (c.y - a.y) == (c.x - a.x) * (b.y - a.y)

def within(p, q, r):
    "Return true iff q is between p and r (inclusive)."
    return p <= q <= r or r <= q <= p

Этот ответ раньше был путаницей трех обновлений. Стоящая информация от них: Brian Hayes глава в [1 113] Красивый Код покрытия пространство дизайна для функции теста коллинеарности - полезный фон. ответ Vincent помог улучшить этого. И это был Hayes, кто предложил тестировать только один из x или координат y; первоначально код имел and вместо [1 110].

6
задан Johnie Karr 24 December 2015 в 15:44
поделиться

2 ответа

Вызов нового метода для строки:

String.prototype.startsWith = function(str){
    return (this.indexOf(str) === 0);
}

должен быть таким простым, как:

alert("foobar".startsWith("foo")); //alerts true

Для вашего второго примера, я предполагаю, вам нужен конструктор, который устанавливает переменную-член «i»:

function sample(i) { 
    this.i = i;     
}

sample.prototype.get_data = function() { return this.i; }

Вы можете использовать это следующим образом:

var s = new sample(42);
alert(s.get_data()); //alerts 42
13
ответ дан 8 December 2019 в 17:24
поделиться

Функции конструктора должны начинаться с заглавной буквы.

function Sample(i) { 
    this.i = i;     
}

var s = new Sample(42);
1
ответ дан 8 December 2019 в 17:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: