2016-11-08 43 views
0

我正在尝试创建“嵌套功能”。但我似乎无法找到解决方案!我如何创建嵌套功能

const func1 = (value1) => { 
    const func2 = (value2) => { 
    console.log(value1 + value2) 
    } 
} 

func1(2).func2(3) 

我真正想做到的是建立自己的小“jQuery函数”

const $ = (element) => { 
    const addClass = (name) => { 
    const x = document.querySelectorAll(element); 
    for (i = 0; i < x.length; i++) { 
     x[i].className = name 
    } 
    } 
} 

$('#circle').addClass('nice') 
+0

https://developer.mozilla.org/zh/docs/Web/JavaScript/Reference/Classes – Ryan

+2

你正在寻找的术语叫做“函数链” - 你现在正在做的事情远远不是你想要的完成 –

+0

'func1(2).func2(3)' - 这里'func1()'**返回一个对象**,它有一个方法'func2' ... – deceze

回答

1

我觉得这个话题是一个SO问题太广,但这里是一个很简单的例子你怎么能做到这一点,让你开始:

const $ = (selector) => { 
 
    const items = document.querySelectorAll(selector); 
 

 
    const self = { 
 
    addClass: (name) => { 
 
     for (let i = 0; i < items.length; i++) { 
 
     items[i].classList.add(name); 
 
     } 
 

 
     return self; 
 
    }, 
 
    removeClass: (name) => { 
 
     for (let i = 0; i < items.length; i++) { 
 
     items[i].classList.remove(name); 
 
     } 
 

 
     return self; 
 
    } 
 
    }; 
 

 
    return self; 
 
} 
 

 
$('#circle').addClass('nice').removeClass('bad');
.nice { 
 
    color: green; 
 
} 
 
.bad { 
 
    color: red; 
 
} 
 
.fancy { 
 
    text-decoration: underline; 
 
}
<div id='circle' class='bad fancy'> 
 
    Hello 
 
</div>

+0

这真棒,谢谢!这叫做什么? :) – Glutch

+1

我不知道上面的代码结构的具体名称,但用于调用一个接一个方法的术语称为“方法链接”或“流畅接口”(https://en.wikipedia) .ORG /维基/ Fluent_interface)“。 – JLRishe