Baseline Widely available
apply()
ë©ìëë 주ì´ì§ this
ê°ê³¼ ë°°ì´ (ëë ì ì¬ ë°°ì´ ê°ì²´) ë¡ ì ê³µëë arguments
ë¡ í¨ì를 í¸ì¶í©ëë¤.
ì°¸ê³ : ì´ í¨ìì 구문ì ê±°ì call()
구문과 ì ì¬í©ëë¤. 근본ì ì¸ ì°¨ì´ì ì call()
ì í¨ìì ì ë¬ë ì¸ì 리ì¤í¸ë¥¼ ë°ëë° ë¹í´, apply()
ë ì¸ìë¤ì ë¨ì¼ ë°°ì´ì ë°ëë¤ë ì ì
ëë¤.
const numbers = [5, 6, 2, 3, 7];
const max = Math.max.apply(null, numbers);
console.log(max);
// Expected output: 7
const min = Math.min.apply(null, numbers);
console.log(min);
// Expected output: 2
구문
func.apply(thisArg, [argsArray]);
매ê°ë³ì
thisArg
ìµì
. func
를 í¸ì¶íëë° ì ê³µë this
ì ê°. this
ë ë©ìëì ìí´ ì¤ì ë¡ ë³´ì¬ì§ë ê°ì´ ìë ì ììì ì ìí©ëë¤. ë©ìëê° non-strict mode ì½ëì í¨ìì¼ ê²½ì°, null
ê³¼ undefined
ê° ì ì ê°ì²´ë¡ ëì²´ëë©°, 기본 ê°ì ì íë©ëë¤.
argsArray
ìµì
. func
ì´ í¸ì¶ëì´ì¼ íë ì¸ì를 ì§ì íë ì ì¬ ë°°ì´ ê°ì²´, í¨ìì ì ê³µë ì¸ìê° ìì ê²½ì° null
ëë undefined
. ECMAScript 5 ì ììì¼ë¡ ì´ë¬í ì¸ìë¤ì ë°°ì´ ëì ì ë¤ë¦ ì ì¬ ë°°ì´ ê°ì²´ë¡ ì¬ì©ë ì ììµëë¤. ìëì ë¸ë¼ì°ì í¸íì± ì 보를 ë³´ì¸ì.
ì§ì í this
ê°ê³¼ ì¸ìë¤ë¡ í¸ì¶í í¨ìì ê²°ê³¼.
ì´ë¯¸ ì¡´ì¬íë í¨ì를 í¸ì¶í ë ë¤ë¥¸ this
ê°ì²´ë¥¼ í ë¹í ì ììµëë¤. this
ë íì¬ ê°ì²´, í¸ì¶íë ê°ì²´ë¥¼ 참조í©ëë¤. apply
를 ì¬ì©í´, ìë¡ì´ ê°ì²´ë§ë¤ ë©ìë를 ì¬ìì±í íììì´ í ë²ë§ ìì±í´ ë¤ë¥¸ ê°ì²´ì ìììí¬ ì ììµëë¤.
apply
ë ì§ìëë ì¸ìì íì
ë§ ì ì¸íë©´ call()
ê³¼ ë§¤ì° ì ì¬í©ëë¤. ì¸ì(íë¼ë¯¸í°)ì 리ì¤í¸ ëì ì¸ìë¤ì ë°°ì´ì ì¬ì©í ì ììµëë¤. ëí apply
를 ì¬ì©í´, ë°°ì´ ë¦¬í°ë´ì´ë (ì, func.apply(this, ['eat', 'bananas']), Array
ê°ì²´ (ì, func.apply(this, new Array('eat', 'bananas'))) 를 ì¬ì©í ì ììµëë¤.
argsArray
íë¼ë¯¸í°ë¥¼ ìí arguments
를 ì¬ì©í ìë ììµëë¤. arguments
ë í¨ìì ì§ì ë³ìì
ëë¤. ì´ë í¸ì¶ë ê°ì²´ì ì§ì ëì§ ìì 모ë ì¸ìì ëí´ ì¬ì©í ì ììµëë¤. ë°ë¼ì, apply
ë©ìë를 ì¬ì©í ë í¸ì¶ë ê°ì²´ì ì¸ì를 ì íìê° ììµëë¤. arguments
를 ì¬ì©í´ 모ë ì¸ìë¤ì í¸ì¶ë ê°ì²´ë¡ ì ë¬í ì ììµëë¤. ê·¸ë¼ í¸ì¶ë ê°ì²´ë ê·¸ ì¸ìë¤ì ì²ë¦¬í ì ìê² ë©ëë¤.
ECMAScript 5ë² ì§¸ íì ììì¼ë¡, 모ë ì ì¬ ë°°ì´ ê°ì²´ íì
ì ì¬ì©í ì ìì¼ë©°, ì¤ì ë¡ ì´ë íë¡í¼í° length
ì ë²ì (0..length-1)
ë´ì ì ì íë¡í¼í°ë¥¼ ê°ë ë¤ë ê²ì ì미í©ëë¤. ì를 ë¤ë©´, ì´ì NodeList
ëë { 'length': 2, '0': 'eat', '1': 'bananas' }
ì ê°ì 커ì¤í
ê°ì²´ë¥¼ ì¬ì©í ì ììµëë¤.
ì°¸ê³ : Chrome 14ì Internet Explorer 9를 í¬í¨í ëë¶ë¶ì ë¸ë¼ì°ì ë ìì§ ì ì¬ë°°ì´ê°ì²´ë¥¼ applyì ì¬ì©í ì ìì¼ë©° ì¤ë¥ê° ì¶ë ¥ë©ëë¤.
ìì ë°°ì´ì ë°°ì´ì ë¶ì´ê¸° ìí´apply
ì¬ì©í기
push
를 ì¬ì©íì¬ ìì를 ë°°ì´ì ì¶ê° í ì ììµëë¤. push
ë ê°ë³ ì¸ì를 íì©í기 ë문ì ì¬ë¬ ìì를 ëìì ì¶ê° í ì ììµëë¤. ê·¸ë¬ë push
ì ë°°ì´ì ì ë¬íë©´ ìì를 ê°ë³ì ì¼ë¡ ì¶ê°íë ëì ì¤ì ë¡ í´ë¹ ë°°ì´ì ë¨ì¼ ììë¡ ì¶ê°íë¯ë¡ ê²°êµ ë°°ì´ ë´ë¶ì ë°°ì´ë¡ ëë©ëë¤. ê·¸ê²ì´ ì°ë¦¬ê° ìíë ê²ì´ ìëë¼ë©´? ì´ ê²½ì° concat
ì ì°ë¦¬ê° ìíë ëìì íì§ë§ ì¤ì ë¡ë 기존 ë°°ì´ì ì¶ê°ëì§ ìê³ ì ë°°ì´ì ë§ë¤ì´ ë°í í©ëë¤. ê·¸ë¬ë ì°ë¦¬ë 기존 ë°°ì´ì ì¶ê°íê³ ì¶ììµëë¤ ... ê·¸ë¼ ì´ì ì´ì©ì£ ? 루í를 ìì± í ê¹ì? ë¶ëª
í ìëì£ ?
ë°©ë²ì apply
!
var array = ["a", "b"];
var elements = [0, 1, 2];
array.push.apply(array, elements);
console.info(array); // ["a", "b", 0, 1, 2]
apply
ì ë´ì¥í¨ì ì¬ì©
apply
를 ë³´ë¤ í¨ê³¼ì ì¼ë¡ ì´ì©íë©´ ì¼ë¶ ë´ì¥ í¨ìë ì´ë¤ ìì
ì ëí´ìë ë°°ì´ê³¼ 루íìì´ ì½ê² ì²ë¦¬ë©ëë¤. ë¤ì ìì ììë ë°°ì´ìì ìµëê°ê³¼ ìµìê°ì 구í기 ìí´ Math.max
/Math.min
í¨ì를 ì´ì©íê³ ììµëë¤.
// min/max number in an array
var numbers = [5, 6, 2, 3, 7];
// using Math.min/Math.max apply
var max = Math.max.apply(null, numbers);
// ì´ë Math.max(numbers[0], ...) ëë Math.max(5, 6, ...)
// ì ê±°ì ê°ì
var min = Math.min.apply(null, numbers);
// vs. simple loop based algorithm
((max = -Infinity), (min = +Infinity));
for (var i = 0; i < numbers.length; i++) {
if (numbers[i] > max) {
max = numbers[i];
}
if (numbers[i] < min) {
min = numbers[i];
}
}
íì§ë§ ì´ë¬í ë°©ìì¼ë¡ apply
를 ì¬ì©íë ê²½ì° ì£¼ìí´ì¼ í©ëë¤. JavaScript ìì§ì ì¸ì ê¸¸ì´ ì íì ì´ê³¼íë ìíì±ì ëí´ ì´í´í íìê° ììµëë¤. í¨ìì ë무 ë§ì(ëëµ ëª ë§ê° ì´ì) ì¸ì를 ì¤ ëì ìí©ì ìì§ë§ë¤ ë¤ë¥¸ë°(ì를 ë¤ì´ JavaScriptCoreì ê²½ì° ì¸ìì ê°ì ì íì 65536), ìíì´ í¹ë³í ì í´ì ¸ ìì§ ì기 ë문ì
ëë¤. ì´ë¤ ìì§ì ìì¸ë¥¼ ëì§ëë¤. ë ì¬í ê²½ì°ë ì¤ì í¨ìì ì¸ì를 ì ë¬íììë ë¶êµ¬íê³ ì°¸ì¡°í ì ìë ì¸ìì ì를 ì ííê³ ìë ê²½ì°ë ììµëë¤(ì´ë¬í ìì§ì ëí´ ë ìì¸í ì¤ëª
íë©´, ê·¸ ìì§ì´ argumentsì ìíì 4ê°ë¡ íë¤ê³ íë©´[ì¤ì ìíì ë¬¼ë¡ ë ìì¼ ê²ì
ëë¤], ì ìì ì½ëì ì ì²´ ë°°ì´ì´ ìëë¼ 5, 6, 2, 3
ë§ apply
ì ì ë¬ëì´ ì¨ ê²ì²ë¼ ìëí©ëë¤).
ë§ì½ ì¬ì©íë ë°°ì´ ë³ìì ìê° ìë§ì ì´ê³¼íë ê²½ì°ìë ë³µí©ì ì¸ ì ëµì ê°êµ¬í´ì¼í ê²ì ëë¤:í ë²ì ì ë¬í ë°°ì´ì ë¶í íì¬ ì¬ì©í기:
function minOfArray(arr) {
var min = Infinity;
var QUANTUM = 32768;
for (var i = 0, len = arr.length; i < len; i += QUANTUM) {
var submin = Math.min.apply(null, arr.slice(i, Math.min(i + QUANTUM, len)));
min = Math.min(submin, min);
}
return min;
}
var min = minOfArray([5, 6, 2, 3, 7]);
ìì±ì ì²´ì´ëì ìí apply
ì¬ì©
Java ì ì ì¬íê², ê°ì²´ë¥¼ ìí constructors ì²´ì´ëì ìí´ apply
를 ì¬ì©í ì ììµëë¤. ë¤ì ìì ìì ì¸ì 리ì¤í¸ ëì ìì±ìë¡ ì ì¬ ë°°ì´ ê°ì²´ë¥¼ ì¬ì©í ì ìê² í´ì£¼ë construct
ë¼ë ì ì Function
ë©ìë를 ìì±í ê²ì
ëë¤.
Function.prototype.construct = function (aArgs) {
var oNew = Object.create(this.prototype);
this.apply(oNew, aArgs);
return oNew;
};
ì°¸ê³ : ì림: ììì ì¬ì©ë
Object.create()
ë©ìëë ìëì ì¼ë¡ ìë¡ì´ ê²ì ëë¤. ëìì¼ë¡, ë¤ì ì ê·¼ë² ì¤ íë를 ê³ ë ¤íì¸ì.
Object.prototype.__proto__
ì¬ì©:
Function.prototype.construct = function (aArgs) {
var oNew = {};
oNew.__proto__ = this.prototype;
this.apply(oNew, aArgs);
return oNew;
};
í´ë¡ì ¸ ì¬ì©:
Function.prototype.construct = function(aArgs) {
var fConstructor = this, fNewConstr = function() {
fConstructor.apply(this, aArgs);
};
fNewConstr.prototype = fConstructor.prototype;
return new fNewConstr();
};
Function
ìì±ì ì¬ì©
Function.prototype.construct = function (aArgs) {
var fNewConstr = new Function("");
fNewConstr.prototype = this.prototype;
var oNew = new fNewConstr();
this.apply(oNew, aArgs);
return oNew;
};
ì¬ì© ìì
function MyConstructor() {
for (var nProp = 0; nProp < arguments.length; nProp++) {
this["property" + nProp] = arguments[nProp];
}
}
var myArray = [4, "Hello world!", false];
var myInstance = MyConstructor.construct(myArray);
console.log(myInstance.property1); // logs 'Hello world!'
console.log(myInstance instanceof MyConstructor); // logs 'true'
console.log(myInstance.constructor); // logs 'MyConstructor'
ì림: ë¤ì´í°ë¸ê° ìë Function.construct
ë©ìëë Date
ì ê°ì ì¼ë¶ ë¤ì´í°ë¸ ìì±ìì ëìíì§ ìì ê²ì
ëë¤. ê·¸ë° ê²½ì°, Function.prototype.bind
ë©ìë를 ì¬ì©í´ì¼ í©ëë¤. ì를 ë¤ì´, ë¤ìê³¼ ê°ì ë°°ì´ì´ ìë¤ê³ í ë, Date
ìì±ì: [2012, 11, 4]
ì í¨ê» ì¬ì©ëë ¤ë©´ ë¤ìê³¼ ê°ì´ ìì±í´ì¼ í©ëë¤: new (Function.prototype.bind.apply(Date, [null].concat([2012, 11, 4])))()
. ì´ë ê°ì¥ ì¢ì ë°©ë²ì´ ìëë©°, ì´ë¤ ìì© íê²½ììë ì¬ì©ëì§ ìì ì ììµëë¤.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4