买一送一
: Эта серия позволяет освоить函数式编程
, и бонусunderscore
Навык
Ежедневный ББ
Перед лицом постоянно меняющихся编程语言
начали войны функционального программирования, гибкие древниеjavascript
Почему бы тебе не присоединиться к войне?javascript
Но старичок естественно поддерживает основные функции. Если вы хотите стать высококлассным программистом, вне зависимости от того, занимаетесь ли вы фронтендом, бэкендом или полным стеком, разрабатываете ли выweb
илиhybrid
, как это не освоить? Автор в основномjava
Практики, объектно-ориентированное мышление имеет глубокие корни, начнем сjavascript
Как краеугольный камень, сломай и встань, заново учисьjavascript
, выполняйте функциональное программирование и получайте невероятное удовольствие от программирования.
сказатьjavascript
из函数编程
Jquery
можно меньше, ноunderscore
важно, независимо от того, владеете вы им или нетunderscore
, и последующие статьи этой серии могут широко использовать эту библиотеку.
Первый урок, который я должен сказать
-
call()
а такжеapply()
владелецcall()
а такжеapply()
Это не ключ к изучению функционального программирования, а краеугольный камень.Давайте сначала кратко поговорим о нем:
фактическиcall
а такжеapply
Цель существования только одна: изменить общее внутреннееthis
указывает на,thisЭто не клише. Это пустая трата времени каждого. Я слышал, что это хулиганство, чтобы не привести пример. Я не могу этого сказать...
/**
* Created by Venda-GM on 2017/10/18.
*/
function Peaple() {}
Peaple.prototype = {
name:'小明',
say:function(){
alert(this.name);
}
}
var Peaple1 = {
name:'小强'
}
var peaple = new Peaple();
peaple.say.call(Peaple1); //小强
peaple.say.apply(Peaple1);//小强
//******************知识点0.0***************
Fn1并没有say这个方法,但是fn原型有,那么fn.call...
Видно, что:
один из нихthis
был указан,name
не оригиналPeaple
середина小明
охватывать
- В заключение:
不管是call 还是 apply 都改变了函数的 this 对象
Между этими двумя функциями всегда существует разрыв. Каков конкретный разрыв?↓
--接受参数不一样
--
call()方法中的[其余的]参数必须直接传给函数
apply()接收两个参数:一个参数是运行时的作用域,
另一个是参数数组、或arguments等
-
arguments
что это такое?
а такжеcall
, применяются так же, как каждыйfunction
встроенные методы,arguments
является свойством, вы можете получить все переменные, переданные этому методу.一般在库中极为常见
Нижняя линия①_.toArray
Просто используйте его.
- После понимания давайте объединим это, чтобы сделать пример:
мы делаем函数
: принимает функцию, возвращает функцию и используетapply
Выполнить возвращенную функцию.
function splat(fun){
return function(array){
return fun.apply(console,array);
}
}
var addArray = splat(function(x,y){
this.log(x,y)
return x+y;
})
addArray([1,2]); //3
```
先自己想1分钟,然后我来解析一下发生了啥?
![](https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2017/10/19/3147f656dc04af503316778871056470~tplv-t2oaga2asx-image.image)
我们调用`addArray`的时候`addArray`调用了`splat()`函数并向他传递了一个`函数`(我们简称`解决方案`吧),而他也没干啥好事,最终`splat()`返回的函数说:`“我也解决不了,你的方案不错,就用你的做吧。”` 说完大笔一挥, `fun.apply() `[同意!] 并且把你提交的`[1,2]`,按照你的解决方案执行了后还给你。
- 并且发现
最终`addArray`内部的`this`对象由`window`转变为了`console`。有人问这有个吊用?下面举例
function splat(fun){
return function(array){
var math_π =[1,4,1,5,9,2,6,5];
return fun.apply(math_π,array);
}
}
var addArray = splat(function(x,y){
this.push(x+y)
console.log(this); //[1,4,1,5,9,2,6,5,3]
return x+y;
})
addArray([1,2]); //3
```
у нас есть частная собственностьmath_π
, не хочу делать его глобальным и выполняюaddArray
Анонимный метод по-прежнему позволяет емуmath_π
Сделайте что-нибудь, тогда мы сможем передать указательapply
указать на это, сделать что-то
я сказал раньше面向对象编程
Сказав это, частный объектно-ориентированный подход заключается в настройке цепочки прототипов.get/set
метод, вnew
объект,get
Вот именно, объектно-ориентированный понять несложно, но немного ли он ориентированjava
Такой же сложный.
Что только что сказал пример? Амнезия снова наносит удар! Мы сказали, что реализовали функцию, которая принимает функцию и возвращает функцию, возвращаемая функция выполняет принятую функцию и меняет область видимости.
Можем сделать наоборот, если есть такое требование:
У меня есть способ принять массив, но теперь есть анархия, чтобы позволить мне только пройти строку, сколько людей не знают, что мне делать?
//原始方法
var F = function(array){
return array.join(' ')
}
данные для отправки
1,2,3,4,5,7,7,zzz,www,ddd
Мы сначала подумалиarguments
, то как F может выполнить требования в неизменном виде? использоватьcall
! полное совпадение
//做一个转换器
var ParamsConvertor = function(fun) {
return function(){ //返回一个匿名函数
fun.call(this,_.toArray(arguments));①
}
}
Мы называем следующее:
ParamsConvertor(F)(1,2,3,4,5,7,7,'zzz','www','ddd');
распечатать результат:
1 2 3 4 5 7 7 zzz www ddd
Идеально!
Это только касается некоторых граней функционального стиля, и уже очень интересно, каково будет начать серьезно программировать?
тут уже поздно писать
пс: ①_.toArray
даunderscore
функция ,
toArray_.toArray(list)
把list(任何可以迭代的对象)转换成一个数组,在转换 arguments 对象时非常有用。
(function(){ return _.toArray(arguments).slice(1); })(1, 2, 3, 4);
=> [2, 3, 4]
Мы видели, что он действительно использовалarguments
объект.
материал:подчеркивание китайской документацииа такжеunderscore
Его также можно использовать вместе сlodash китайская документацияМастер на данный моментunderscore
Вот и все.
Блог будет размещен на этом в будущемgit
В библиотеке и напишите список, можете кликнуть, если интересноstar
,точкаstar
не теряйся,github
Есть архивы.
Официально ступит дальше函数式编程
, вы готовы, кроме того设计模式
Я также буду стараться изо всех сил, чтобы продолжать обновлять его.Я изначально планировал обновлять его по одной серии за раз, но я не мог этого вынести и хотел написать другие вещи.На самом деле, я хочу написать java совсем недавно, и я хотите использовать его.Electron
пакет одинelasticsearch
Клиент, продолжайте поддерживать爬虫框架
, Я хочу сделать много вещей, не торопитесь.