Нужно ли внешнему решению понимать внутреннее, и будет ли внутреннее решение накладывать вето на внешнее. Сочетая внутреннее и внешнее, чем лучше, тем лучше.
1. Введение
При разработке API определяются имя и расположение параметров, и можно сказать, что определение функции завершено. Потому что пользователям API нужно только знать, как передавать параметры и какие значения вернет функция, не зная внутренностей. Так что параметры более-менее влияют на гибкость и сложность API. При разработке API ниже просто написано, как создавать параметры.Если у вас есть другие идеи, оставьте сообщение в области комментариев.
Примеры, используемые ниже, в дополнение к собственному API JQuery. Другие примеры взяты из общей библиотеки функций, инкапсулированных сами по себе.ecDo.欢迎提建议和 star。
2. Когда устанавливать параметры
На самом деле когда выставлять параметры особо нечего сказать, норма. Пока вы чувствуете, что использование параметров сделает использование API более простым и гибким, вы можете его использовать.
Настройка параметров может поначалу не вызывать хорошего вдохновения, но в процессе использования пользоваться им будет неудобно, и он, естественно, будет оптимизирован как метод.
Например, естьecDo.count(array|string,item)
Этот API предназначен для подсчета количества вхождений каждого элемента массива или количества каждого символа строки.
Это легко реализовать, код также размещен ниже
count(arr) {
let obj = {}, k, arr1 = []
//记录每一元素出现的次数
for (let i = 0, len = arr.length; i < len; i++) {
k = arr[i];
if (obj[k]) {
obj[k]++;
} else {
obj[k] = 1;
}
}
//保存结果{el-'元素',count-出现次数}
for (let o in obj) {
arr1.push({el: o, count: obj[o]});
}
return arr1;
},
let strTest1='abbccc'
console.log(ecDo.count(strTest1));
//result:[{el: "a", count: 1},{el: "b", count: 2},el: "c", count: 3}]
Но иногда разработчикам не нужно знать количество всех элементов, например нужно знать'a'
Количество вхождений , этот случай возвращает напрямую'a'
Этого числа достаточно, нет необходимости возвращать массив, как в приведенном выше примере. Таким образом, его будет удобнее использовать, и его очень просто изменить, просто добавьте параметр и суждение.
count(arr,item) {
//重复代码略
return item?obj[item]:arr1;
},
let strTest1='abbccc'
console.log(ecDo.count(strTest1),'a');
//result:1
Есть общий APIecDo.clearKeys(obj)
--Удалить свойства с «пустыми» (null, undefined и '') значениями в объекте.
Этого также легко добиться,
clearKeys(obj) {
let _newPar = {};
for (let key in obj) {
if (obj[key]===0||obj[key]===false||obj[key]) {
_newPar[key] = obj[key];
}
}
return _newPar;
},
ecDo.clearKeys({1:0,2:2,3:''})
//result:{1: 0, 2: 2}
Наверняка мы находим такие формулировки слишком негибкими, и если в следующий раз возьмем0
а такжеfalse
свойства также очищаются? Если в следующий раз вы захотите установить значение как'--'
свойства также очищаются?这样就做不到了,所以还要改一下,增加一个参数 clearValues - 待清空的值。
clearKeys(obj, clearValues = [null, undefined, '']) {
clearValues.forEach((item, index) => {
clearValues[index] = Number.isNaN(item) ? 'NaN' : item
});
let _newPar = {};
for (let key in obj) {
//checkValue 看下面定义
if (!checkValue(obj[key], clearValues)) {
_newPar[key] = obj[key];
}
}
return _newPar;
},
ecDo.clearKeys({a:'',b:0,c:11})
//result:{b: 0,c: 11}
ecDo.clearKeys({a:'',b:0,c:'--'},['--',''])
//result:{b: 0}
ecDo.clearKeys({a:'',b:0,c:11,d:false},[0,''])
//result:{c: 11,d: false}
ecDo.clearKeys({a:NaN,b:2,c:undefined},[NaN,undefined])
//result:{b: 2}
function checkValue(val, vals) {
let _val = val;
if (Number.isNaN(val)) {
_val = 'NaN'
}
return vals.indexOf(_val) !== -1;
}
Таким образом, если вы хотите очистить какое-либо значение атрибута, вы можете сделать это здесь.
3. Количество параметров и префикс
Можно сказать, что эти два пункта внимания являются наиболее часто встречающимися и наиболее неоправданными.
Прежде всего, количество параметров должно быть как можно меньше, не влияя на использование API, чем меньше, тем лучше. Поскольку параметров меньше, затраты памяти на API ниже, а вызов более удобен.
Параметров может быть как можно меньше, и чем меньше, тем лучше, есть посылка — это не влияет на использование API. При наличии нескольких параметров использование API может быть более удобным, гибким и простым. Несколько параметров — это несколько параметров.
Тогда предлог параметров означает, что чем выше корреляция параметров, чем больше их нельзя опустить, тем больше их следует ставить впереди. Хотя можно указать дополнительные параметры позже, это может вызвать много проблем.
4. Использование объектов в качестве параметров
Когда следует использовать объект в качестве параметра функции, временно обнаружено, что есть два случая.
1. Когда слишком много параметров
2. Когда параметры не фиксированы
Например, есть не менее 5 параметров для AJAX. Ссылка на URL-запрос, метод запроса на метод, параметр запроса на данные, параметр запроса данных, обратный вызов успеха, обратный вызов отказа отказа. Если вы не используете объект как параметр, полный способ записи это выглядит следующим образом
ajax(url,method,data,success,fail)
Но среди этих 5 параметров, кроме url, другие параметры могут быть опущены или заданы по умолчанию. Если вам нужно только передать URL и успех, вам нужно написать следующее
ajax(url,'','',success)
Поскольку порядок параметров не может быть хаотичным, его нужно записать так. Не скажу, насколько это неудобно, если параметров слишком много, то параметры будут выглядеть очень долго, и легко ошибиться в порядке параметров, что вызовет проблемы.
ajax({url:url,success:function(){}})
О том, использовать ли объект в качестве параметра, следует судить только по одному показателю: удобен ли он в использовании и гибок ли.
5. Значение параметра по умолчанию
Когда вы должны разработать по умолчанию? Это можно разделить на несколько обсуждений
Во-первых, значение параметра больше, чем частота возникновения других обстоятельств того времени. Например, есть ECDO.CHRYPT (STR, REGINDEX, REPTESTEST) API, роль очень проста, состоит в том, чтобы зашифровать определенную позицию строки. Например, пользователи часто встречаются должны скрыть номер телефона.
номера телефонов состоят
ecDo.encrypt('18819233362','3,7')
//result:188*****362
ecDo.encrypt('18819233362','3,7','+')
//result:188+++++362
ecDo.encrypt('18819233362','4')
//result:*****233362
ecDo.encrypt('18819233362','-4')
//result:188192*****
В этом API третий параметр repText может использовать * в большинстве случаев. Если вы не установите значение по умолчанию для repText, если вы каждый раз будете передавать *, это будет не только много писать, но и чувствовать себя некомфортно.
Также бывает случай, когда выполнение с определенной позиции до конца заканчивается. Например, в родной substr(start,length) первый параметр — это нижний индекс начального символа, а второй параметр — длина перехвата. Если опущено, обрезать от начала до конца. Это даже удобство.
5. Параметрический полиморфизм
Упомянутый здесь полиморфизм параметров немного отличается от полиморфизма наследования.
Параметрический полиморфизм очень распространен, цель состоит в том, чтобы просто пройти через другой способ, чтобы ссылочная функция работала по-другому. Смотрите здесь, вы можете вдруг подумать, сращивание. Поскольку можно добиться сращивания для увеличения массива, удалите, замените
//删除
let arr=[1,2,3,4,5,6]
arr.splice(0,1)
//result:arr:[2, 3, 4, 5, 6]
//替换
arr=[1,2,3,4,5,6]
arr.splice(2,1,0)
//result:arr:[1, 2, 0, 4, 5, 6]
//增加
arr=[1,2,3,4,5,6]
arr.splice(2,0,0)
//result:arr:[1, 2, 0, 3, 4, 5, 6]
Но сплайс не следует рассматривать как параметрический полиморфизм, его можно рассматривать только как способ написания некоторых навыков.
Демонстрирует параметрический полиморфизм, такой как attr JQuery. Вы можете либо получить значение атрибута, либо установить значение атрибута.
//获取 dom 元素 id 的值
$(dom).attr('id')
//设置 dom 元素 id 的值
$(dom).attr('id','domId')
JQuery должен улучшить полиморфизм$()
. Причина, по которой JQuery срабатывает, с этим$()
Существует отличная взаимосвязь, пока это допустимый селектор, и элемент существует на странице, его можно найти. Делает выбор элементов очень простым.
ecDo.setCookie(cookieName,value,day)//设置(cookie名称,cookie值,有效的天数)
ecDo.getCookie(cookieName)//获取
ecDo.removeCookie(cookieName)//删除
На данный момент
ecDo.cookie(cookieName,value,day)//设置(cookie名称,cookie值,有效的天数)
ecDo.cookie(cookieName)//获取
ecDo.cookie(cookieName,value,-1)//删除
Таким образом, это проще, чем раньше, что эквивалентно простому запоминанию API.
Полиморфизм параметров заключается в том, чтобы обвинение API менялось в соответствии с параметрами параметров. Это эквивалентно объединению API со схожими обязанностями в один. Нет необходимости предоставлять пользователям слишком много API, которыми удобно пользоваться пользователям. Даже это может нарушать принцип единой вины, но перекликается с принципом наименьшего знания. Делает использование API максимально простым.
5-1 Когда не устанавливать полиморфизм параметров
Параметрический полиморфизм — это объединение API со схожими обязанностями в один. Но иногда это не подходит для использования. Лучше разделить объединенный API на несколько.
Например, при инкапсуляции часто используемых API ранее. Существует API для удаления пробелов из строк:ecDo.trim(str,type)
(строка str- подлежащая обработке, тип типа- удаление пробелов слева ---- 1- пробелы, все пробелы 2-, 3- пробелы слева, а справа пробелы 4-).
использовать форму
ecDo — это общая библиотека функций, которую я инкапсулирую.
let str=' 守 候 ';
console.log(ecDo.trim(str,1));//'守 候'
console.log(ecDo.trim(str,2));//'守候'
console.log(ecDo.trim(str,3));//'守候 '
console.log(ecDo.trim(str,4));//' 守候'
Если вы используете его таким образом, все, должно быть, видели проблему. 1 2 3 4 Какого черта? Даже если вы знаете, что такое призраки, вы должны помнить этих призраков. Стоимость памяти высока, а звонить не удобно. Затем он был разделен на четыре функции.
let str=' 守 候 ';
console.log(ecDo.trim(str));//'守 候'
console.log(ecDo.trimAll(str));//'守候'
console.log(ecDo.trimLeft(str));//'守候 '
console.log(ecDo.trimRright(str));//' 守候'
Это упрощает использование, хотя есть еще несколько API. Стоимость памяти также меньше, чем раньше. Необходимость установки полиморфизма параметров зависит от ситуации вызова.
6. Резюме
Ну а как насчет параметров API временно напишет здесь, большая часть содержимого этого раздела, длина не очень длинная, это легко понять. Но параметры этой темы относительно открыты, если у вас есть хорошие идеи. Добро пожаловать, чтобы оставить сообщение в области комментариев.
------------------------- Великолепная разделительная линия --------------------
Если вы хотите узнать больше, общаться со мной и продвигать вакансии, добавьте меня в WeChat. Или обратите внимание на мой паблик WeChat: В ожидании книжного магазина