2015-09-15 4 views
1

У меня есть этот код:Как сделать эту функцию динамической в ​​JavaScript

То, что я хочу, чтобы это принять эту функцию

function (x1,y1,x2, y2,x3, y3, x4, y4, xToCheck, yToCheck, Allowance); 

Это возможно сочетание для var x и var y

var x1 = x1 - x2; 
var y1 = y1 - y2; 
var x2 = x2 - x3; 
var y2 = y2 - y3; 
var x3 = x3 - x4; 
var y3 = y3 - y4; 
var x4 = x2 - x4; 
var y4 = y2 - y4; 
var x5 = x1 - x3; 
var y5 = y1 - y3; 

Примечание: вышеприведенная функция может принимать только один комплект var, который является var x1 и var y1, wha Я хочу, чтобы моя функция была более динамичной, чтобы она могла принимать другой набор var.

+1

* «Я хочу, чтобы он принял эту функцию» * - А? – GolezTrol

+0

Я хочу сделать его динамичным – Believer

+0

Ваша потребность не совсем понятна! –

ответ

0

Хочет функцию взять неопределенный/динамический набор координат x1, y1 ... xn, yn?

Затем вы можете использовать один аргумент (массив или объект) для всех координат, как это:

ST.PT.isMouseOnLine = function (points, xToCheck, yToCheck, Allowance) {} 

Затем передайте массив точек:

ST.PT.isMouseOnLine([ {x: 10, y:10}, { x:20, y:30}, { x:30, y:10} ], 15, 15, 10); 

так что вы можете перебирать над массивом points и выполните проверки для каждой точки.

+0

у вас есть демо-код выше? Я буду очень признателен. – Believer

+0

@ newuser1 Я не уверен, что это то, о чем вы просите, просто догадываясь. Если мое предположение верно, я мог бы предоставить более подробную информацию, но сначала вы должны четко определить свою проблему. ПОЧЕМУ вы хотите, чтобы функция принимала больше аргументов? Каков текущий результат и каков ожидаемый результат после внесения изменений? – pawel

+0

Я хочу, чтобы моя функция принимала больше аргументов, чтобы она могла обрабатывать весь набор var, который в коде выше не обрабатывается. – Believer

0

Вы имеете в виду, что количество аргументов является переменной?
Я думаю, вы просто используете аргумент типа массива.
Как это:

function (xs,ys, xToCheck, yToCheck, Allowance){ 
    var newxs,newys; 
    newxs[0]=xs[0]-xs[1];//compute newxs,newys from xs,ys 
    ... 
} 

и использовать некоторый алгоритм для вычисления newxs от хза и ув. Как это:

//just a example,it's not correct 
for(int i=0;i<x.length;i++){ 
    newxs[i]=xs[i]-xs[i+1]; 
    newys[i]=ys[i]-ys[i+1]; 
    ... 
} 
+0

Можете ли вы уточнить больше – Believer

+0

На самом деле, я не уверен, чего вы хотите. Возможно, вы сначала разработали. – behtgod

0

Если вы хотите дополнительные значения по умолчанию для отправляемых переменных - как вы упомянули в комментарии - использовать эту структуру:

Пусть говорят, что мы хотим xToCheck, yToCheck, Allowance быть дополнительно:

ST.PT.isMouseOnLine = function (x1, y1, x2, y2, _xToCheck, _yToCheck, _Allowance) { 

    //Get the variables: 
    xToCheck = _xToCheck || 5; //replace value with default value or variable. 
    yToCheck = _yToCheck || 5; //same 
    Allowance = _Allowance || 0; //same 

    //Calculate: 
    var x = x1 - x2; 
    var y = y1 - y2; 
    var m = y/x; 

    /* rest of your code */ 
} 

Обратите внимание, что присвоение variable = var1 || var2 означает, что если var1 не определено, тогда установите равным var2.

+0

извините, мой комментарий ранее неправильный – Believer

0

Вы можете использовать объект arguments для перебора всех аргументов, переданных вашей функции. Таким образом, вы можете просто удалить последние 3 аргумента (xToCheck, yToCheck и надбавку) и перебрать полученные значения для заполнения динамического X и Y массивы, как это:

function arbitraryArguments() { 
    // first, convert function arguments into an array 
    var args = Array.prototype.slice.call(arguments); 

    // then get the last 3 arguments, which are always present 
    var 
     Allowance = args.pop(), 
     yToCheck = args.pop(), 
     xToCheck = args.pop(), 
     x   = [], 
     y   = []; 

    // ... and fill-in the X and Y arrays from what's left 
    for (var i in args) { 
     if (i % 2) { 
      y.push(args[i]); 
     } else { 
      x.push(args[i]); 
     } 
    } 

    // ... do whatever you need with all the X and Y values 
    //  in these x and y arrays 

    for (var a in x) { 
     console.log('x' + a + ' = ' + x[a]); 
     console.log('y' + a + ' = ' + y[a]); 
    } 

    console.log('Allowance = ' + Allowance); 
    console.log('yToCheck = ' + yToCheck); 
    console.log('xToCheck = ' + xToCheck); 
} 

arbitraryArguments(1, 2, 3, 4, 5, 6, 7, 8, 111, 222, 1010); 

JSFiddle: https://jsfiddle.net/tz1t6cmn/

+0

Как мне получить доступ к нему в моем коде? – Believer

+0

Функция '' '' '' '' '' '' '' '' '' '' '' '' '' это просто переписать вашу собственную 'ST.PT.isMouseOnLine()' функцию с удаленной функциональностью (заменяется на «// ... делать все, что вам нужно, со всеми значениями X и Y в этом массиве x и y ") –

+0

fyi, знание JavaScript требуется для применения принципов JavaScript, а StackOverflow - это не место, где можно найти бесплатную силу разработчика, чтобы сделать это за вас - наши ответы помогают вам двигаться вперед, а не код для вашей программы для вас –

Смежные вопросы