2016-11-08 62 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