當定義和調用函數時,JavaScript 函數對象會自動具有一些特定的屬性,以下是一些常見的屬性和方法。 1. arguments : arguments 是一個類數組對象,它包含了函數調用時傳遞的參數。它允許你在函數內部訪問傳遞給函數的參數列表,即使在函數定義時未明確聲明這些參數。可以通過索引訪問 ...
當定義和調用函數時,JavaScript 函數對象會自動具有一些特定的屬性,以下是一些常見的屬性和方法。
1. arguments : arguments 是一個類數組對象,它包含了函數調用時傳遞的參數。它允許你在函數內部訪問傳遞給函數的參數列表,即使在函數定義時未明確聲明這些參數。可以通過索引訪問 arguments 對象中的參數值,也可以使用 arguments.length 獲取傳遞的參數個數。
function exampleFunc(a, b) { console.log(arguments[0]); // 訪問第一個參數 console.log(arguments.length); // 參數的個數 } exampleFunc(1, 2, 3); // 1,3
註意:在es6開始,推薦使用剩餘參數或者使用命名參數來代替使用 arguments 對象。
2. length : length 屬性返回函數聲明時的形參數量,即函數期望接收的參數個數。它表示函數定義時定義的形參個數,不包括剩餘參數。
function exampleFunc(a, b, c) { // 函數體 } console.log(exampleFunc.length); // 3
3. name : name 屬性返回函數的名稱。對於具名函數,它返回函數的實際名稱。
function namedFunction() { // 函數體 } const anonymousFunction = function() { // 函數體 } console.log(namedFunction.name); // namedFunction console.log(anonymousFunction.name); // anonymousFunction
這些屬性使得函數對象在運行時具有額外的元數據,可以根據需要訪問這些屬性來獲取有關函數的信息,例如函數的參數、參數個數和名稱。這些屬性在編寫靈活和通用的函數時非常有用。
4. caller : caller 屬性返回一個調用當前函數的函數引用。如果當前函數是在全局作用域中被調用的,那麼 caller 將返回 null 。該屬性在嚴格模式下被禁用。
function outerFunc() { innerFunc(); } function innerFunc() { console.log(innerFunc.caller); // outerFunc } outerFunc();
5. prototype : prototype 屬性允許你向函數對象添加新的屬性和方法。它用於創建基於原型繼承的對象。
function Person(name) { this.name = name; } Person.prototype.sayHello = function() { console.log("Hello, " + this.name); }; const person = new Person("John"); person.sayHello(); // Hello, John
6. bind() : bind() 方法返回一個新的函數,該函數在調用時將指定的 this 值綁定到提供的參數,用於創建函數的新實例並永久性地綁定函數的上下文。
const obj = { name: "John", greet: function() { console.log("Hello, " + this.name); } }; const boundFunc = obj.greet.bind(obj); boundFunc(); // Hello, John
類似的還有 apply() 、 call() 、 toString() 等。
7. constructor : constructor 屬性返回創建函數對象的原型對象的引用。
function Person(name) { this.name = name; } const person = new Person("John"); console.log(person.constructor); // 輸出:Person