_.각각의 context(리스트, 반복기, [context])에서 context란 무엇입니까?
저는 언더스코어 .js가 처음입니다.입니까의 입니까?[context]
인에_.each()
어떻게 사용해야 합니까?
변수는 컨텍스트 만 설정합니다.this
반복기 함수에 있어요.
var someOtherArray = ["name","patrick","d","w"];
_.each([1, 2, 3], function(num) {
// In here, "this" refers to the same Array as "someOtherArray"
alert( this[num] ); // num is the value from the array being iterated
// so this[num] gets the item at the "num" index of
// someOtherArray.
}, someOtherArray);
작업 예: http://jsfiddle.net/a6Rx4/
의 각 하여 해당 의 .someOtherArray
, 로 됩니다.this
상황 파라미터로 통과시켰기 때문에.
this
입니다를 합니다.window
물건.
엑스트라:
대답하기 위해서는What's the advantage of that? Why not just refer to someOtherArray[num] rather than this[num]?
할 수 있는 , 익명의문하겠습니다를 iteratee
재사용이 용이하도록 기능에 콜백:
const someOtherArray = ["name","patrick","d","w"];
const yetAnotherArray = ["what","goes","here","?"];
function alertStr(num){
alert( this[num] );
}
_.each([1, 2, 3], alertStr, someOtherArray);
_.each([1, 2, 3], alertStr, yetAnotherArray);
this
사용할 수 .iteratee
e에 합니다._.each
이 다른 context
가치.이것은 만약 우리가 그것을 가지고 있다면 작동하지 않을 것입니다.someOtherArray
안에 iteratee
.
context
is where is wherethis
를 반복기 함수에서 참조합니다.예를 들어,
var person = {};
person.friends = {
name1: true,
name2: false,
name3: true,
name4: true
};
_.each(['name4', 'name2'], function(name){
// this refers to the friends property of the person object
alert(this[name]);
}, person.friends);
컨텍스트를 사용하면 통화 시 인수를 제공하여 일반적인 사전 작성 도우미 기능을 쉽게 사용자 지정할 수 있습니다.
몇 가지 예:
// stock footage:
function addTo(x){ "use strict"; return x + this; }
function pluck(x){ "use strict"; return x[this]; }
function lt(x){ "use strict"; return x < this; }
// production:
var r = [1,2,3,4,5,6,7,8,9];
var words = "a man a plan a canal panama".split(" ");
// filtering numbers:
_.filter(r, lt, 5); // elements less than 5
_.filter(r, lt, 3); // elements less than 3
// add 100 to the elements:
_.map(r, addTo, 100);
// encode eggy peggy:
_.map(words, addTo, "egg").join(" ");
// get length of words:
_.map(words, pluck, "length");
// find words starting with "e" or sooner:
_.filter(words, lt, "e");
// find all words with 3 or more chars:
_.filter(words, pluck, 2);
제한된 예를 통해서도 재사용 가능한 코드를 만드는 "추가 인수"가 얼마나 강력한지 알 수 있습니다.상황별로 다른 콜백 기능을 만드는 대신 보통 낮은 레벨의 도우미를 적응시킬 수 있습니다.목표는 최소한의 보일러 플레이트와 함께 동사와 두 개의 명사를 묶는 사용자 정의 논리를 갖추는 것입니다.
인정하건대, 화살표 함수는 일반적인 순수 함수의 "코드 골프" 이점을 많이 없앴지만, 의미론과 일관성 이점은 여전히 남아 있습니다.
나는 항상 덧붙입니다."use strict"
e를 [].map()
기본값을 통과할 때의 호환성.그렇지 않으면 물체로 강제로 옮겨지는데, 이 물체는 여전히 작동하지만, 유형별로 작동하는 것이 더 빠르고 안전합니다.
_.각각의 단순한 사용
_.each(['Hello', 'World!'], function(word){
console.log(word);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
여기에 사용할 수 있는 간단한 예가 있습니다._.each
:
function basket() {
this.items = [];
this.addItem = function(item) {
this.items.push(item);
};
this.show = function() {
console.log('items: ', this.items);
}
}
var x = new basket();
x.addItem('banana');
x.addItem('apple');
x.addItem('kiwi');
x.show();
출력:
items: [ 'banana', 'apple', 'kiwi' ]
에.addItem
언더스코어는 다음과 같이 여러 번 사용할 수 있습니다.
_.each(['banana', 'apple', 'kiwi'], function(item) { x.addItem(item); });
을 부르는 입니다.addItem
이 물건들을 순차적으로 세 번. 하고 각 기본적으로 배열을 반복하고 각 항목에 대해 익명 콜백 함수를 호출합니다를 호출하는 콜백 합니다.x.addItem(item)
은 . 합니다.addItem
멤버 함수(예: 항목이 필요함)는 일종의 무의미합니다.그래서 익명의 기능을 수행하는 것보다_.each
이 간접 및 호출을 피합니다.addItem
직접:
_.each(['banana', 'apple', 'kiwi'], x.addItem);
하지만 이건 안에 있는 바구니처럼 작동하지 않을 겁니다addItem
멤버함수this
당신의 것을 언급하지 않을 것입니다.x
당신이 만든 바구니.그래서 당신은 당신의 바구니를 건네줄 수 있는 옵션이 있는 것입니다.x
로 사용되다[context]
:
_.each(['banana', 'apple', 'kiwi'], x.addItem, x);
_.each 및 context를 사용하는 전체 예제:
function basket() {
this.items = [];
this.addItem = function(item) {
this.items.push(item);
};
this.show = function() {
console.log('items: ', this.items);
}
}
var x = new basket();
_.each(['banana', 'apple', 'kiwi'], x.addItem, x);
x.show();
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
간단히 말해서, 만약 당신이 전달하는 콜백 함수가_.each
어떤 용법을 써서라도this
그리고 당신은 무엇이 무엇인지를 지정해야 합니다.this
콜백 기능 내부를 참조해야 합니다.그런 것처럼 보일 수도 있습니다.x
예를 들어보면 중복이지만,x.addItem
그냥 함수일 뿐이고 완전히 관련이 없을 수도 있습니다.x
아니면basket
예를 들어, 다음과 같은 다른 객체를 사용할 수 있습니다.
function basket() {
this.items = [];
this.show = function() {
console.log('items: ', this.items);
}
}
function addItem(item) {
this.items.push(item);
};
var x = new basket();
_.each(['banana', 'apple', 'kiwi'], addItem, x);
x.show();
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
즉, 당신은 어떤 가치를 다음과 같이 묶습니다.this
콜백 안에서 또는 다음과 같이 직접 바인딩을 사용할 수도 있습니다.
_.each(['banana', 'apple', 'kiwi'], addItem.bind(x));
이 기능이 어떻게 다른 언더스코어 방법으로 유용할 수 있습니까?
약간의 으로가 ,underscorejs
이 콜백을 를 들어면수)를 this
해당 를 어떤 해당 를 ) 할 수 있습니다.[context]
파라미터가 주된 의도입니다.언더스코어 js 문서 상단에는 다음과 같이 나와 있습니다.반복 횟수가 컨텍스트 개체에 바인딩되어 있습니다(하나가 전달된 경우).
,context
. this
내부에서 each
.
언더스코어 소스 코드에서 관련 방법의 소스 코드를 사용하여 설명하겠습니다.
의 ._.each
아니면_.forEach
는 다음과 같습니다.
_.each = _.forEach = function(obj, iteratee, context) {
iteratee = optimizeCb(iteratee, context);
var i, length;
if (isArrayLike(obj)) {
for (i = 0, length = obj.length; i < length; i++) {
iteratee(obj[i], i, obj);
}
} else {
var keys = _.keys(obj);
for (i = 0, length = keys.length; i < length; i++) {
iteratee(obj[keys[i]], keys[i], obj);
}
}
return obj;
};
여기서 주목할 두번째 문장이 중요합니다.
iteratee = optimizeCb(iteratee, context);
여기서,context
다른 됩니다.optimizeCb
됩니다.iteratee
나중에 부르는 거죠.
var optimizeCb = function(func, context, argCount) {
if (context === void 0) return func;
switch (argCount == null ? 3 : argCount) {
case 1:
return function(value) {
return func.call(context, value);
};
case 2:
return function(value, other) {
return func.call(context, value, other);
};
case 3:
return function(value, index, collection) {
return func.call(context, value, index, collection);
};
case 4:
return function(accumulator, value, index, collection) {
return func.call(context, accumulator, value, index, collection);
};
}
return function() {
return func.apply(context, arguments);
};
};
에서 알 수 , optimizeCb
,한다면context
그러면 통과되지 않습니다.func
그대로 돌려줍니다. 만약에.context
되고,다로 .
func.call(context, other_parameters);
^^^^^^^
func
를 호출하여 메서드를 호출하는 데 사용됩니다.this
그것의 맥락.그래서 언제.this
됩니다 안에서 됩니다.func
context
.
// Without `context`
_.each([1], function() {
console.log(this instanceof Window);
});
// With `context` as `arr`
var arr = [1, 2, 3];
_.each([1], function() {
console.log(this);
}, arr);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
를 해 볼 수 .context
자바스크립트의 마지막 선택 파라미터로 사용합니다.
언급URL : https://stackoverflow.com/questions/4946456/what-is-context-in-eachlist-iterator-context
'programing' 카테고리의 다른 글
EF에서 영향을 받는 행을 볼 수 없음 (0) | 2023.10.11 |
---|---|
리눅스(ubuntu )에서 동영상 캡쳐 장치(웹 카메라) 목록을 가져오는 방법? (C/C++) (0) | 2023.10.11 |
ASP에서 Visual Studios Profiler를 사용하려고 할 때 메타베이스 오류가 발생했습니다.넷사이트 (0) | 2023.10.11 |
mariaDB 쿼리에 대한 sql 코드 성능 향상 (0) | 2023.10.11 |
VS2012 - 웹 양식 - 번들링 혼란 (0) | 2023.10.11 |