在JavaScript中,成員函數(shù)既可以是對象的方法,也可以直接定義在全局作用域中。而在成員函數(shù)中,我們可以訪問到對象本身,從而獲取或修改對象的屬性和方法,為對象增加功能或?qū)崿F(xiàn)對其的控制。
舉個(gè)例子,假設(shè)我們有一個(gè)表示矩形的對象rectangle,其中包含兩個(gè)屬性width和height,以及一個(gè)計(jì)算矩形面積的方法area()。我們可以定義一個(gè)成員函數(shù)double(),能夠?qū)⒕匦蔚膶捄透叨技颖叮a如下:
var rectangle = { width: 10, height: 20, area: function() { return this.width * this.height; }, double: function() { this.width *= 2; this.height *= 2; } };在double()函數(shù)中,我們可以通過this關(guān)鍵字來訪問到rectangle對象本身,并修改其屬性值。然后,我們就可以調(diào)用這個(gè)函數(shù),將矩形大小翻倍:
rectangle.double(); console.log(rectangle.width); // 20 console.log(rectangle.height); // 40 console.log(rectangle.area()); // 800除了訪問對象本身以外,成員函數(shù)還能夠獲取或修改對象的其他屬性或方法。我們可以在函數(shù)中使用點(diǎn)記號或方括號來獲取或設(shè)置屬性值,這取決于屬性名是否是一個(gè)合法的標(biāo)識符。對于像width和height這樣的標(biāo)識符,我們可以使用點(diǎn)記號來訪問它們:
var rectWidth = rectangle.width; rectangle.height = 30;而對于屬性名中含有特殊字符或空格的情況,我們需要使用方括號來訪問屬性,如下所示:
var myObj = { "username": "johndoe", "email address": "johndoe@example.com", "!#@$%^&*()": "special characters" }; console.log(myObj.username); // "johndoe" console.log(myObj["email address"]); // "johndoe@example.com" console.log(myObj["!#@$%^&*()"]); // "special characters"在成員函數(shù)中,我們還可以使用call()和apply()方法來實(shí)現(xiàn)對函數(shù)作用域的控制。這兩個(gè)方法都用于間接調(diào)用函數(shù),并可以指定函數(shù)執(zhí)行時(shí)的this值和參數(shù)。使用call()方法時(shí),我們將指定的this值作為第一個(gè)參數(shù)傳遞給該函數(shù);而使用apply()方法時(shí),我們需要將參數(shù)封裝到一個(gè)數(shù)組中作為第二個(gè)參數(shù)傳遞給該函數(shù),如下所示:
function greet() { console.log("Hello, " + this.name); } var person1 = { name: "Alice" }; var person2 = { name: "Bob" }; greet.call(person1); // "Hello, Alice" greet.call(person2); // "Hello, Bob" greet.apply(person1); // "Hello, Alice" greet.apply(person2); // "Hello, Bob"以上代碼中,我們定義了一個(gè)簡單的greet()函數(shù),它可以向控制臺輸出“Hello, ”和傳入的參數(shù)。我們創(chuàng)建了兩個(gè)人物對象person1和person2,然后使用call()和apply()方法來分別調(diào)用greet()函數(shù),以輸出不同的信息。可以看到,雖然greet()函數(shù)中沒有直接訪問對象的屬性,但通過this關(guān)鍵字,它能夠間接訪問到對象本身,從而獲取對象的屬性值。 總之,在JavaScript中,成員函數(shù)是對象的重要組成部分,它們能夠增加對象的功能或?qū)崿F(xiàn)對其的控制。要切實(shí)掌握成員函數(shù)的用法,需要理解this關(guān)鍵字、屬性的訪問和設(shè)置方法、及call()和apply()方法的用法,并在實(shí)際開發(fā)中靈活運(yùn)用。