--- title: Function slug: Web/JavaScript/Reference/Global_Objects/Function tags: - Constructor - Function - JavaScript - NeedsTranslation - TopicStub translation_of: Web/JavaScript/Reference/Global_Objects/Function ---
Konstruktor
Function
membuat sebuah objek Function
baru. Di Javascript setiap fungsi adalah sebuah objek Function
.
new Function ([arg1[, arg2[, ...argN]],] functionBody)
arg1, arg2, ... argN
x
", "theValue
", atau "a,b
".functionBody
Objek Function
yang dibuat dengan konstruktor Function
diuraikan ketika fungsi dibuat. Hal tersebut kurang efisien dibandingkan dengan mendeklarasikan fungsi dengan function expression atau function statement dan memanggilnya dengan kode Anda, karena fungsi-fungsi tersebut diuraikan dengan sisa kode.
Semua argumen yang diteruskan ke fungsi diperlakukan sebagai nama identifier parameter dalam fungsi yang akan dibuat, dalam urutan yang dilewatkan.
Catatan: Fungsi dibuat dengan konstruktor Function
jangan membuat penutup pada konteks kreasi mereka; Mereka selalu dibuat dalam ruang lingkup global. Saat menjalankannya, mereka hanya bisa mengakses variabel lokal mereka sendiri dan variabel global, bukan variabel dari ruang lingkup dimana konstruktor Function
dipanggil. Berbeda dari menggunakan {{jsxref("eval")}} dengan kode untuk fungsi ekspresi.
memanggil konstruktor Function
sebagai sebuah fungsi (tanpa menggunakan operatur baru
) mempunyai efek yang sama seperti memanggilnya sebagai konstruktor
Function
Objek Function
global tidak memiliki method atau properti sendiri. Namun, fungsi itu sendiri mewarisi beberapa method dan properti melalui prototipe dari {{jsxref("Function.prototype")}}.
Function
Function
instancesFunction
instances mewarisi method dan properti dari {{jsxref("Function.prototype")}}. Seperti halnya semua konstruktor, Anda dapat mengubah objek prototipe konstruktor untuk membuat perubahan pada semua Function
instances.
Function
Dibawah ini kode untuk membuat sebuah objek Function
yang menggunakan dua argumen.
// Contoh dapat dijalankan langsung di konsol JavaScript Anda // Buat fungsi yang mengambil dua argumen dan mengembalikan jumlah argumen tersebut var adder = new Function('a', 'b', 'return a + b'); // Memanggil fungsi adder(2, 6); // > 8
Argumen "a
" dan "b
" adalah nama argumen formal yang digunakan pada function body "return a + b
".
Membuat fungsi dengan konstruktor Function
adalah salah satu cara dinamis untuk membuat objek baru dengan beberapa kode yang dapat dieksekusi ke dalam lingkup global dari suatu fungsi. Contoh berikut (pintasan rekursif untuk memodifikasi DOM secara masif) tidak dimungkinkan tanpa permintaan konstruktor Function
untuk setiap kueri baru jika Anda ingin menghindari penutup tiap fungsi.
<!doctype html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>MDN Example - a recursive shortcut to massively modify the DOM</title> <script type="text/javascript"> var domQuery = (function() { var aDOMFunc = [ Element.prototype.removeAttribute, Element.prototype.setAttribute, CSSStyleDeclaration.prototype.removeProperty, CSSStyleDeclaration.prototype.setProperty ]; function setSomething(bStyle, sProp, sVal) { var bSet = Boolean(sVal), fAction = aDOMFunc[bSet | bStyle << 1], aArgs = Array.prototype.slice.call(arguments, 1, bSet ? 3 : 2), aNodeList = bStyle ? this.cssNodes : this.nodes; if (bSet && bStyle) { aArgs.push(''); } for ( var nItem = 0, nLen = this.nodes.length; nItem < nLen; fAction.apply(aNodeList[nItem++], aArgs) ); this.follow = setSomething.caller; return this; } function setStyles(sProp, sVal) { return setSomething.call(this, true, sProp, sVal); } function setAttribs(sProp, sVal) { return setSomething.call(this, false, sProp, sVal); } function getSelectors() { return this.selectors; }; function getNodes() { return this.nodes; }; return (function(sSelectors) { var oQuery = new Function('return arguments.callee.follow.apply(arguments.callee, arguments);'); oQuery.selectors = sSelectors; oQuery.nodes = document.querySelectorAll(sSelectors); oQuery.cssNodes = Array.prototype.map.call(oQuery.nodes, function(oInlineCSS) { return oInlineCSS.style; }); oQuery.attributes = setAttribs; oQuery.inlineStyle = setStyles; oQuery.follow = getNodes; oQuery.toString = getSelectors; oQuery.valueOf = getNodes; return oQuery; }); })(); </script> </head> <body> <div class="testClass">Lorem ipsum</div> <p>Some text</p> <div class="testClass">dolor sit amet</div> <script type="text/javascript"> domQuery('.testClass') .attributes('lang', 'en')('title', 'Risus abundat in ore stultorum') .inlineStyle('background-color', 'black')('color', 'white')('width', '100px')('height', '50px'); </script> </body> </html>
Specification | Status | Comment |
---|---|---|
{{SpecName('ES1')}} | {{Spec2('ES1')}} | Initial definition. Implemented in JavaScript 1.0. |
{{SpecName('ES5.1', '#sec-15.3', 'Function')}} | {{Spec2('ES5.1')}} | |
{{SpecName('ES6', '#sec-function-objects', 'Function')}} | {{Spec2('ES6')}} | |
{{SpecName('ESDraft', '#sec-function-objects', 'Function')}} | {{Spec2('ESDraft')}} |
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Basic support | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} |
Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Basic support | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} |