Function.prototype.call()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itโs been available across browsers since โจ2015ๅนด7ๆโฉ.
call()
ใฏ Function
ใคใณในใฟใณในใฎใกใฝใใใงใ this
ใฎๅคใจใ็ฌ็ซใใฆๆไพใใใๅผๆฐใซใใฃใฆ้ขๆฐใๅผใณๅบใใพใใ
่ฉฆใใฆใฟใพใใใ
function Product(name, price) {
this.name = name;
this.price = price;
}
function Food(name, price) {
Product.call(this, name, price);
this.category = "food";
}
console.log(new Food("cheese", 5).name);
// ๆๅพ
ใใใๅบๅ็ตๆ: "cheese"
ๆงๆ
call(thisArg)
call(thisArg, arg1)
call(thisArg, arg1, arg2)
call(thisArg, arg1, arg2, /* โฆ, */ argN)
ๅผๆฐ
thisArg
-
func
ใๅผใณๅบใใใใจใใซthis
ใจใใฆไฝฟ็จใใใๅคใงใใ้ขๆฐใๅณๆ ผใขใผใใงใชใๅ ดๅใnull
ใจundefined
ใฏใฐใญใผใใซใชใใธใงใฏใใซ็ฝฎใๆใใใใใชใใใฃใๅคใฏใชใใธใงใฏใใซๅคๆใใใพใใ arg1
, โฆ,argN
็็ฅๅฏ-
ๅผใณๅบใๅ ใฎ้ขๆฐใซๆธกใใใๅผๆฐใงใใ
่ฟๅค
this
ใฎๅคใจๅผๆฐใๆๅฎใใฆ้ขๆฐใๅผใณๅบใใ็ตๆใงใใ
่งฃ่ชฌ
ใกใข:
ใใฎ้ขๆฐใฏใปใผ apply()
ใจๅ็ญใงใใใ call()
ใงใฏ้ขๆฐใฎๅผๆฐใใชในใใจใใฆๅๅฅใซๆธกใใใใฎใซๅฏพใใ apply()
ใงใฏ 1 ใคใฎใชใใธใงใฏใใ้ๅธธใฏ้
ๅใซใพใจใใใใพใใไพใใฐใ func.call(this, "eat", "bananas")
ใจ func.apply(this, ["eat", "bananas"])
ใฎใใใซใชใใพใใ
้ๅธธใ้ขๆฐใๅผใณๅบใๅ ดๅใ้ขๆฐๅ
ใฎ this
ใฎๅคใฏใใใฎ้ขๆฐใใขใฏใปในใใใใชใใธใงใฏใใงใใ call()
ใไฝฟ็จใใใจใๆขๅญใฎ้ขๆฐใๅผใณๅบใ้ใซใๆๅใฎใใญใใใฃใจใใฆใชใใธใงใฏใใซใใฎ้ขๆฐใๆทปไปใใใใจใชใใ this
ใซไปปๆใฎๅคใๅฒใๅฝใฆใใใจใใงใใพใใใใใซใใใใใใชใใธใงใฏใใฎใกใฝใใใๆฑ็จใฎใฆใผใใฃใชใใฃ้ขๆฐใจใใฆไฝฟ็จใใใใจใใงใใพใใ
่ญฆๅ:
ใณใณในใใฉใฏใฟใผใ้ฃ็ตใใ๏ผไพใใฐใ็ถๆฟใๅฎ่ฃ
ใใ๏ผใใใซ call()
ใไฝฟ็จใใชใใงใใ ใใใใใใฏใใณใณในใใฉใฏใฟใผ้ขๆฐใๅใชใ้ขๆฐใจใใฆๅผใณๅบใใใจใซใชใใใคใพใ new.target
ใ undefined
ใจใชใใใฏใฉในใใจใฉใผใ็บ็ใใพใใใใใฏใ new
ใชใใงๅผใณๅบใใใใใใงใใไปฃใใใซ Reflect.construct()
ใพใใฏ extends
ใไฝฟ็จใใฆใใ ใใใ
ไพ
call ใไฝฟ็จใใ้ขๆฐใๅผใณๅบใใจ 'this' ใฎใณใณใใญในใใฎๆๅฎ
ๆฌกใฎไพใงใฏใ greet
ใกใฝใใใๅผใถใจใใthis
ใฎๅคใ obj
ใชใใธใงใฏใใซใใคใณใใใฆใใพใใ
function greet() {
console.log(this.animal, "typically sleep between", this.sleepDuration);
}
const obj = {
animal: "cats",
sleepDuration: "12 and 16 hours",
};
greet.call(obj); // cats typically sleep between 12 and 16 hours
call() ใไฝฟ็จใใๆๅใฎๅผๆฐใๆๅฎใใชใ้ขๆฐใฎๅผใณๅบใ
ๆๅใฎ thisArg
ๅผๆฐใ็็ฅใใใจใๆขๅฎใงใฏ undefined
ใจใชใใพใใ ๅณๆ ผใขใผใไปฅๅคใงใฏใ this
ใฎๅคใฏ globalThis
๏ผใฐใญใผใใซใชใใธใงใฏใใซ้กไผผ๏ผใซ็ฝฎใๆใใใใพใใ
globalThis.globProp = "foo";
function display() {
console.log(`globProp ใฎๅคใฏ ${this.globProp}`);
}
display.call(); // "globProp ใฎๅคใฏ foo" ใจๅบๅ
ๅณๆ ผใขใผใใงใฏ this
ใฎๅคใฏ undefined
ใซใชใใพใใไปฅไธใๅ็
งใใฆใใ ใใใ
"use strict";
globalThis.globProp = "foo";
function display() {
console.log(`globProp ใฎๅคใฏ ${this.globProp}`);
}
display.call(); // undefined ใฎ 'sData' ใฎใใญใใใฃใฏ่ชญใใชใ
ใกใฝใใใฎใฆใผใใฃใชใใฃ้ขๆฐใธใฎๅคๆ
call()
ใฏ้ๅธธใฎ้ขๆฐๅผใณๅบใใจใปใผๅๆงใงใใใ this
ใ้ขๆฐใฎใขใฏใปในๅ
ใฎๅคใงใฏใชใใ้ๅธธใฎๅผๆฐใจใใฆๆธกใใใ็นใ็ฐใชใใพใใใใใฏใๆฑ็จใฆใผใใฃใชใใฃ้ขๆฐใใฉใฎใใใซๅไฝใใใฎใใจไผผใฆใใพใใ array.map(callback)
ใๅผใถไปฃใใใซใ map(array, callback)
ใไฝฟ็จใใใใจใงใ Object.prototype
ใๅคๆดใใใใจใชใใ้
ๅใงใฏใชใ้
ๅ้ขจใชใใธใงใฏใ๏ผไพใใฐ arguments
๏ผใซๅฏพใใฆ map
ใไฝฟ็จใใใใจใใงใใพใใ
ไพใใฐใ้
ๅ้ขจใฎใชใใธใงใฏใใๅฎ้ใฎ้
ๅใซๅคๆใใใใใซไฝฟ็จใใ Array.prototype.slice()
ใไพใซๆใใพใใ ใใฎไพใงใฏใๆฌกใฎใใใชใทใงใผใใซใใใไฝๆใใใใจใใงใใพใใ
const slice = Array.prototype.slice;
// ...
slice.call(arguments);
ใชใใ slice.call
ใไฟๅญใใฆใใใใๅใชใ้ขๆฐใจใใฆๅไปใใใใจใฏใงใใพใใใ call()
ใกใฝใใใใใฎๅคใ่ชญใฟๅใใใใๅผใณๅบใในใ้ขๆฐใๆๅฎใใใฆใใพใใใใงใใใใฎๅ ดๅใ bind()
ใไฝฟ็จใใใจ this
ๅคใ call()
ใซใใคใณใใใใใจใใงใใพใใๆฌกใฎใณใผใใงใฏใ slice()
ใฏ Function.prototype.call()
ใฎใใคใณใๆธใฟใใผใธใงใณใงใใใ this
ๅคใฏ Array.prototype.slice()
ใซใใคใณใใใใฆใใพใใใคใพใใ่ฟฝๅ ใฎ call()
ๅผใณๅบใใ็็ฅใงใใใจใใใใจใงใใ
// ๅใฎไพใฎ "slice" ใจๅใ
const unboundSlice = Array.prototype.slice;
const slice = Function.prototype.call.bind(unboundSlice);
// ...
slice(arguments);
ไปๆงๆธ
Specification |
---|
ECMAScriptยฎ 2026 Language Specification # sec-function.prototype.call |
ใใฉใฆใถใผใฎไบๆๆง
Loadingโฆ