คอนสตรัคเตอร์ Function() คาดหวังอาร์กิวเมนต์สตริงจำนวนเท่าไรก็ได้ อาร์กิวเมนต์ตัวสุดท้ายคือ เนื้อหาของฟังก์ชัน (function body) ซึ่งสามารถมีคำสั่ง JavaScript ได้หลายคำสั่ง คั่นด้วย semicolon
ไวยากรณ์
new Function([arg1[, arg2[, ...argN]],] functionBody)
ตัวอย่าง
สร้างฟังก์ชันคูณเลขด้วย Function Constructor:
<html>
<head>
<script>
var func = new Function("x", "y", "return x * y;");
function multiplyFunction() {
var result = func(15, 35);
document.write(result);
}
</script>
</head>
<body>
<p>คลิกปุ่มด้านล่างเพื่อเรียกใช้ฟังก์ชัน</p>
<form>
<input type="button" onclick="multiplyFunction()" value="Call Function">
</form>
</body>
</html>
ข้อควรระวัง
- ประสิทธิภาพ: ช้ากว่าการประกาศฟังก์ชันทั่วไป เพราะต้อง parse โค้ดใหม่ทุกครั้ง
- ความปลอดภัย: มีความเสี่ยงด้าน XSS หากนำข้อมูลจากผู้ใช้มาสร้างฟังก์ชัน
- ขอบเขต (Scope): ฟังก์ชันที่สร้างด้วย Constructor จะมีขอบเขตเฉพาะ global scope เท่านั้น (ไม่เข้าถึง closure ได้)
แนะนำ: ใช้ Function Declaration หรือ Function Expression แทนในกรณีทั่วไป ใช้ Constructor เฉพาะกรณีที่ต้องสร้างฟังก์ชันแบบไดนามิกจากสตริงเท่านั้น